R语言用tidyr包进行长宽数据转换

长型和宽型数据在数据分析中非常常见。 之前我们进行长宽数据转换使用较多的包是reshape或reshape2,原作者新推出的tidyr包对数据整合更加优秀,让我们一起来学习一下如何使用tidyr包进行长宽数据转换。

长型和宽型数据在数据分析中非常常见。

一般人们看到的以行为样本以列为变量的数据为宽型数据,非常适合我们查看和理解,例如下图:

attachments-2023-03-fvdRhIpt641197139555b.png

但是在数据分析中,R语言常常需要将数据转换成长型数据才能便于分析和作图,例如下图:
attachments-2023-03-1j4UOGGV641197662cc50.png


之前我们进行长宽数据转换使用较多的包是reshape或reshape2,而tidyr包可以看作是reshape2包的进化版本,

该包的作者依旧是Rstudio的首席科学家,R语言界的大神Hadley Wickham。

tidyr包往往与dplyr包结合使用,目前渐有取代reshape2包之势, 是值得关注的一个R包。接下来我们用例子学习一下如何使用tidyr包进行长宽数据转换。


我们先建立一个简单的数据框:
widedata <- data.frame(ID=c(1,1,2,2),
                       Time=c(1,2,1,2),
                       x1=c(3,4,5,6),
                       x2=c(7,8,9,10))
数据框如下,为宽型数据:
attachments-2023-03-p0Rzt4xh641190d93cd19.png

一、宽型数据转长型数据(Wide to long

tidyr中的gather函数,跟reshape和reshape2中的melt函数的参数有较大的改变,但是更容易理解,用法为:

gather(data, key = "key", value = "value", ..., na.rm = FALSE, convert = FALSE, factor_key = FALSE)

其中的key和value是指定新生成的变量的变量名,...表示可以要进行转换的变量。


直接看例子:
library(tidyr)
longdata <- gather(widedata, key = "variable", value ="value", x1:x2) # "variable" 和 "value" 是新生成的变量名,数据是根据 x1:x2 列生成的

attachments-2023-03-uuFQtnzL6411906223e1c.png这里variable和value是自己命名的,不同于reshape包中melt函数自动生成的,相对更易于理解。



二、长型数据转宽型数据(Long to wide

tidyr包中的spread函数,跟reshape包中的cast函数类似,不过参数与gather相对应,用法为:

spread(data, key, value, fill = NA, convert = FALSE, drop = TRUE, sep = NULL)

关键的参数是key和value,指定后就可以根据相应的key和value进行长到宽的转换


示例:

widedata2 <- spread(longdata, key = "variable", value = "value")        #指定参数key和value对应的是longdata中的哪一列

attachments-2023-03-De7xi2T9641190a677811.png


三、另一个例子

可能上边的数据列数太多,有的小白不太好理解,这里用开头的数据再操作一遍,帮助大家理解。

很多情况下,我们用R进行一些数据处理后会得到长型数据如下:

attachments-2023-03-v6AzihgY641194ddb0dc5.png这种长型数据不太方便阅读,那我们来转换成方便阅读的宽型数据

1.长型数据转宽型数据

widedf <- spread(longdata, key = "variable", value = "value")

attachments-2023-03-8jYkKIwI64119595ecd53.png


那我们再把它转回到长型数据

2.宽型数据转长型数据

longdf <- gather(widedf, key = "variable", value ="value", Var1:Var2:Var3)

warning信息不用管

attachments-2023-03-8CvVbmWc641195faa7fb8.png


参考:https://www.jianshu.com/p/c30200471c7d

  • 发表于 2023-03-15 18:06
  • 阅读 ( 2030 )
  • 分类:R

4 条评论

请先 登录 后评论
星莓
星莓

生物信息工程师

58 篇文章

作家榜 »

  1. omicsgene 698 文章
  2. 安生水 347 文章
  3. Daitoue 167 文章
  4. 生物女学霸 120 文章
  5. xun 82 文章
  6. 红橙子 78 文章
  7. rzx 74 文章
  8. CORNERSTONE 72 文章