R绘图

R语言reshape2包处理数据2021.3.6

2021-03-06  本文已影响0人  R语言_茶味先生

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)
上一篇 下一篇

猜你喜欢

热点阅读