业务问题到数据问题--发现问题
数据提取
数据整合
数据分析
数据可视化 数据产品
数据结论到业务解决方案功能--解决问题
本次实现:对数据进行格式变换
读入数据
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—将一列分离为多列;
参考