R语言长-宽型数据的相互转换

R 长型和宽型数据的相互转换

> ##########################################################################
> #2020-02-10
> #R长型和宽型数据的相互转换
> #https://www.jianshu.com/p/c30200471c7d
> 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))
> widedata
  ID Time x1 x2
1  1    1  3  7
2  1    2  4  8
3  2    1  5  9
4  2    2  6 10
> library(reshape2)
> (longdata2 <- melt(widedata,id.vars=c("ID","Time"),measure.vars=c("x1","x2")))
  ID Time variable value
1  1    1       x1     3
2  1    2       x1     4
3  2    1       x1     5
4  2    2       x1     6
5  1    1       x2     7
6  1    2       x2     8
7  2    1       x2     9
8  2    2       x2    10
> 
> (widedata2 <- dcast(longdata2,ID+Time~variable))
  ID Time x1 x2
1  1    1  3  7
2  1    2  4  8
3  2    1  5  9
4  2    2  6 10
> (widedata2 <- dcast(longdata2,ID~Time+variable))
  ID 1_x1 1_x2 2_x1 2_x2
1  1    3    7    4    8
2  2    5    9    6   10
> 
> #用tidyr进行数据的长宽转换
> 
> library(tidyr)
> (longdata3 <- gather(widedata, key = "variable",value ="value", x1:x2 ))
  ID Time variable value
1  1    1       x1     3
2  1    2       x1     4
3  2    1       x1     5
4  2    2       x1     6
5  1    1       x2     7
6  1    2       x2     8
7  2    1       x2     9
8  2    2       x2    10
> (widedata3 <- spread(longdata3,key = "variable",value = "value"))
  ID Time x1 x2
1  1    1  3  7
2  1    2  4  8
3  2    1  5  9
4  2    2  6 10
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容