R 長型和寬型數(shù)據(jù)的相互轉(zhuǎn)換
> ##########################################################################
> #2020-02-10
> #R長型和寬型數(shù)據(jù)的相互轉(zhuǎn)換
> #http://www.reibang.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進行數(shù)據(jù)的長寬轉(zhuǎn)換
>
> 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