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]

posted @ 2022-06-29 22:00  郝hai  阅读(341)  评论(0编辑  收藏  举报