R语言塑形

业务问题到数据问题--发现问题
数据提取
数据整合
数据分析
数据可视化  数据产品
数据结论到业务解决方案功能--解决问题
本次实现:对数据进行格式变换

读入数据

TestData <- read.table(file= "C:/Users/Desktop/Data/TestData.txt" ,sep="\t", stringsAsFactors=FALSE)
##给每列加上列名
colnames(TestData ) <- c("Name","Date")
##去除科学计数法
TestData$Name<-  format(TestData$Name,scientific=FALSE)
##base包apply族函数是R语言中很有特色的一类函数,包括了apply、sapply、lapply、tapply、aggregate等等

加载数据塑形-package----reshape2

library(reshape2)
###数据框的-长-宽数据变换
##value.var
  ##dcast(TestData,Name~Date)
#数据由宽边为长
##id variable 标识变量 表示哪些值是在描述同一独享
##measure variable 度量变量
###--id.vars        
####--measure.vars
  ###--variable.name=   value.name=
## melt()

数据塑形-package-plyr

#类似于数据透视表
library(plyr)
#       arrary  data.frame  list        discarded
#arrary aaply       adply       alply       a_ply
#data.frame daply       ddply       dlply       d_ply
#list       laply       ldply       llply       l_ply
#所有的函数具有xyply的形式,其中x表示数据数据类型,y表示输出数据类型,而_表示丢弃。_则表示没有输出
##install.pacckages("plyr")
library(plyr)
##将数据框按照Name分组并转换成列表
midT <- dlply(TestData,~Name)
##对列表进行处理
transTo <- function(List){
    Data <- as.data.frame(List )
    ##没有的数据会用NA代替,c()
    LastDat = as.data.frame(c(Data[1,1],Data[1,2],Data[2,2],Data[3,2]),stringsAsFactors=F)
    }
##将列表转换为数据框--2:5是数据,第一列是名称
 wantedData <- ldply(sapply(midT ,transTo))[,2:5]

 ##将NA替换为0 
  replaceNA <- function(dat){
    dat[is.na(dat)] <- 0 
    dat
    }
 resData <- apply(wantedData ,2,replaceNA )
 ##将dat[dat==0] <- NA
write.table(resData, file =outputFile, append = FALSE, quote = FALSE, sep = ",", row.names = FALSE, col.names = FALSE )


##转换为列表--将列表中的每一个元素进行函数处理
## R语言中列表各组件的名称叫做标签(tags)
partData <-  head(TestData,18)
midtemp <- dlply(partData ,~Name)
##单方括号 提取其中元素作为列表
str(midtemp[2])
str(midtemp[3])
attributes(midtemp[3])
midtemp[3]
names(midtemp[3])
##专门用于计算列表list的长度--length得到的是list的个数,lengths是得到每个list下的个数
   as.integer(lengths(midtemp[3]))
## data.frame( oneName =character(N), Date01 =character(N), Date02 = character(N),Date03 = character(N))
##提取其中元素作为数据框
tep  <- midtemp[[1]]
names(tep)
rbind.fill(midtemp)
##数据框到列表-根据列来转化
##as.list(partData )

加载数据塑形-package--dplyr

##显示更友好的 tbl_df 类型
##dplyr包预处理时建议使用tbl_df()或tbl_cube()或tbl_sql()函数将原数据转换为tbl对象
library(dplyr)
#筛选: filter()
#排列: arrange()
#选择: select()
#变形: mutate()
#汇总: summarise()
#分组: group_by()
##分组-然后提取分组中的数据放到某一列
##数据集通过 group_by() 添加了分组信息后,mutate(), arrange() 和 summarise() 函数会自动对这些 tbl 类数据执行分组操作
dataT <- tbl_df(TestData)
planes <- group_by(dataT, Name)  
summarise(planes,  count = n() )
##类似于SQL中的连接功能
inner_join(x, y, by = NULL, copy = FALSE, suffix = c(".x", ".y"), ...)
left_join(x, y, by = NULL, copy = FALSE, suffix = c(".x", ".y"), ...)
right_join(x, y, by = NULL, copy = FALSE, suffix = c(".x", ".y"), ...)
full_join(x, y, by = NULL, copy = FALSE, suffix = c(".x", ".y"), ...)
semi_join(x, y, by = NULL, copy = FALSE, ...)
anti_join(x, y, by = NULL, copy = FALSE, ...)
distinct

加载数据塑形-package--tidyr

#gather—宽数据转为长数据;
#spread—长数据转为宽数据;
#unit—多列合并为一列;
#separate—将一列分离为多列;

参考

R语言经典实例

blogroll

social