1. merge函数合并数据
merge函数通过by选择合并某列的相同值。
x<-data.frame(k1=c(NA,NA,3,4,5),k2=c(1,NA,NA,4,5),data=1:5)
y<-data.frame(k1=c(NA,2,NA,4,5),k2=c(NA,NA,3,4,5),data=1:5)
merge(x,y,by="k1")#第一种,按照k1列合并
#merge(x,y,by=c("k1","k2"))#第二种,按照k1列,k2列合并
#merge(x,y,by="k1",incomparables =NA)#第三种,按照k1列合并而且将包含NA的行都去掉
2. reshape2包合并数据
这个包处理数据与excel包中的透视表有些类似
2.1 安装并载入reshape2包
install.packages("reshape2")
library(reshape2)
2.1 使用reshape2包
reshape包包含融合(melt)和重铸(cast),melt函数是将宽数据变为长数据,而cast则是将长数据变为宽数据。
2.1.1 melt函数
melt函数就是将很宽的表融合成一列,变成很长的表,之后设定id.var=month和day就是固定搜索宽表中带有月日的列。这里我们使用airquality内置数据集作为示例。
airquality#载入数据集
names(airquality)<-tolower(names(airquality))将列名变为小写,更方便输入
aql<-melt(airquality)#数据融合
head(aql)#查看融合后数据
图1 融合后的截取的前六行数据
因为初始数据集有六列数据。
图2 初始数据集有六列
但是melt函数只将前四列进行了数据融合,我这里猜测是无论什么数据集,他默认会将后两列作为ID,并且我们不用id.vars指明就不会显示。所以我们需要指明melt函数前四列作为变量值,后两列month和day作为ID。
aql<-melt(airquality,id.vars=c("month","day"))#指明id
图3和图1可以对照参考
图3 指定id融合后的数据
2.1.2 cast函数
cast函数分为dcast函数和acast函数,dcast函数用于重铸数据框,而acast函数用于重铸向量,矩阵或者数组。
指定重铸格式
aqw<-dcast(aql,month+day~variable)#按照公式进行计算
这里按月份指定重铸,不知道应该对每月的数据进行何种处理则会报错。所以我们通过fun.aggregate参数指定计算函数,na.rm=T则用来计算时去除缺失值
aqw<-dcast(aql,month~variable,fun.aggregate=mean,na.rm=T)#指定函数,重铸数据
#aqw<-dcast(aql,month~variable,fun.aggregate=sum,na.rm=T)
网友评论