tidyr包几个函数的用法
在R语言中,tidyr主要提供了一个类似Excel中数据透视表 (pivottable)的功能; gather和spread函数将数据在长格式和宽格式之间相互转化,应用在比如稀疏矩阵和稠密矩阵之间的转化; separate和union方法提供了数据分组拆分、合并的功能,应用在nominal数据的转化上,整洁数据是进行数据再加工的基础。
一、tidyr包的导入
R将整洁数据定义为:每个变量的数据存储在自身的列中,每个观测值的数据存储在其自身的行中。
install.packages("tidyr")
library(tidyr)
在tidyr包中,一般包括几个函数:gather()函数;spread()函数;separate()函数;unite()函数;缺失值处理replace_na()函数。
二、tidyr包函数的使用
2.1 gather()函数
gather()函数,它可以实现将以列位字段的数据表,转化为一列长数据格式,即二维表向一维表的转换。
df <- data.frame(姓名=c('赵','钱','孙','李','周'),
语文=c(95,89,79,88,81),
数学=c(89,88,81,78,90),
英语=c(89,78,73,69,80))
df2 <- gather(df,long,成绩,语文,数学,英语)
2.2 spread()函数
tdata<-mtcars[1:10,1:3] #截取部分数据
tdata<-data.frame(names=rownames(tdata),tdata) #将tdata的行名赋值给向量names,并将其添加tdata中
gather(tdata,key="Key",value="Value",names:disp)
gdata<-gather(tdata,key="Key",value="Value",2:4) #与上面同义,取names到disp列就是取1到4列
spread(gdata,key="Key",value="Value") #将已经变长的数据按着Key列和Value列进行还原为宽数据
2.3 separate()函数
Group Year Qtr.1 Qtr.2 Qtr.3 Qtr.4
1 1 2006 4 7 1 6
2 1 2007 4 6 2 4
3 1 2008 4 5 3 8
4 1 2009 4 4 4 8
5 2 2006 4 3 5 9
6 2 2007 4 2 6 10
7 2 2008 4 1 7 11
8 2 2009 4 0 8 12
9 3 2006 4 -1 9 13
10 3 2007 4 -2 10 14
11 3 2008 4 -3 11 15
12 3 2009 4 -4 12 16
#将上面数据读入R中
dd<- read.table("clipboard",header=T)
dd1=gather(dd,jijie,value,Qtr.1:Qtr.4)
separate(dd1,col=jijie,into = c("Qtrt","jijie"),sep = "\\.")
2.4 unite()函数
df<-data.frame(x=c(NA,"a.b","a.c","b.c")) #生成数据框
x<-separate(df,col=x,into=c("A","B")) #数据分割
#x<-separate(df,col=x,into=c("A","B"),sep="\\.") #数据分割,因为.在R语言中属于元字符,是正则表达式的内容,代表任何字符,因此sep="."会被解读为任意字符,所以要加转义符号写成sep="\\."
x<-separate(df,col=x,into=c("A","B"),sep="\\.") #将分割数据赋值给x
unite(x,col="AB",A,B,sep=".") #将分割数据x合并起来
2.5 replace_na()
data_wide <- data.frame(姓名=c('赵','钱','孙','李','周'),
语文=c(95,89,79,88,NA),
数学=c(89,88,81,78,90),
英语=c(89,78,73,69,NA))
#以60分为几个,将它填入数据缺失值中。
data_wide %>%
replace_na(list(语文=60,英语=60))
三、总结
参考文献
1.(R语言tidyr包处理数据2021.3.6)[https://www.jianshu.com/p/b8e6bc0825db]
2.(R语言数据处理:tidyr包学习)[https://blog.csdn.net/m0_56444893/article/details/125212325]