长型数据和宽型数据在数据分析中非常常见 ,其中宽型数据更具可读性,长型数据则更适合做分析。
R-tidyr主要有以下几大功能:
gather—宽数据转为长数据;
spread—长数据转为宽数据;
unit—多列合并为一列;
separate—将一列分离为多列
unit和separate可参考Tidyverse|数据列的分分合合,一分多,多合一,本文主要介绍利用tidyr包实现长宽数据的转化。
一 载入R包,数据
二 宽数据转为长数据
使用gather
函数:gather(data, key, value, … , na.rm = FALSE, convert = FALSE)
其中 data:为待转换的宽数据
key:将原数据框中的所有列赋给一个新变量key
value:将原数据框中的所有值赋给一个新变量value
...:可以指定哪些列聚到一列中 (同reshape2区别)
na.rm:是否删除缺失值
区别于reshape2,...
只将指定变量从宽数据变成长数据
1) 不gather car_ID
列 (行名转化而来)
2)gather 在 mpg:am之间的所有列
mtcars_long3 <- mtcars %>%三 长数据转为宽数据
使用spread
函数:spread(data, key, value, fill = NA, convert = FALSE, drop = TRUE)
data:待转换的长数据
key:需要将变量值拓展为字段的变量
value:需要分散的值
fill:对于缺失值,可将fill的值赋值给被转型后的缺失值
mtcars_wide <- mtcars_long2 %>%这实际将原来gather后的结果还原为gather前, 结果与mtcars一样,只是各列的相互位置稍有调整。
Working_in_the_Tidyverse
【觉得不错,右下角点个“在看”,期待您的转发,谢谢!】
联系客服