结束了前面的可视化的专题,接下来会写一些具体数据处理方面的东西。文中涉及到的处理包的话,在cran上都有,直接install.packages()就可以获取!!
一·获取dataframe的子集
##简单的获取行和列
iris[1:9,]
iris[,2:5]
iris[1:9,2:5]
##通过中括号条件选择来选取,可以用逻辑连接符来限制多重条件,非常的方便
iris[iris$SepalLength > 7,]
iris[iris$SepalLength > 7 & iris$SepalWidth > 3 & iris$PetalLength >6,]
##split拆分,f参数表示按照拆分的列,拆分后得到的是列表
iris_splited<-split(iris,f=iris$Species)
二.reshape2包蹂躏数据
#上面所说的方法用来分割比较方便,但涉及到计算还是reshape2包方便
##第一个函数dcast,分组计算,第一个参数是数据集,第二个参数划分特征,第三是需要计算的特征列,第四个参数是计算函数
dcast(subdata,Species~.,value.var = 'PetalWidth',fun = mean)
##但由于dcast只能正对一个数值列,如果我要同时求其他数值列的平均该如何解决,这就涉及到melt先将原来的宽型数据转化成长型数据(也就是变量一列,数值一列)
##melt重构数据,第一个参数数据对象,第二个分类变量。
iris_long<-melt(iris,id = "Species")
head(iris_long)
##再dcast分类处理
dcast(iris_long,Species~variable,value.var='value',fun=mean)
#用reshape2中tips的数据集再深入熟悉下
##dcast value.var智能带一个数值特征,分类变量可以多个
str(tips)
dcast(tips,sex~.,value.var = 'tip',fun = mean)
dcast(tips,sex~size,value.var = 'tip',fun = mean)
##糅合再计算
tips_melt<-melt(data = tips,id.vars = c('sex','smoker','day','time','size'))
str(tips_melt)
head(tips_melt)
##dcast计算糅合后的数据集就可以同时算出total_bill,tip,当然怎么分组的话可以随心所欲。
dcast(tips_melt,sex~variable,value.var = 'value',fun=mean)
dcast(tips_melt,sex+time~variable,value.var = 'value',fun=mean)
三.plyr包对数据处理
##还是基于tips数据集,定义计算小费和总餐费的比率函数
fee_fun<-function(x){
sum(x$tip)/sum(x$total_bill)
}
##plyr分类处理ddply,dd表示输入时dataframe输出是dataframe,以此类推有dlply,ld,ll等等,还是很好记的,但处理函数要涉及所有的数值列
ddply(tips,"sex",fee_fun)
ddply(tips,sex~smoker,fee_fun)
ddply(tips,sex~smoker+time,fee_fun)
四.数据的连接
##自定义量df
df1<-data.frame(id=c(1,2,3),gender=c(23,24,26))
df2<-data.frame(id=c(2,4,1),name=c("d","w","t"))
df1
df2
##merge连接,会自动连接
merge(df1,df2,by="id")
##join连接,type可以选择连接方式
join(df1,df2,by='id',type='right')
join(df1,df2,by='id',type='left')
join(df1,df2,by='id')