我有一个数据集如下:
SUBD | X1 | X2
0 |.789|.655
1 |.889|.998
我试图以下面的格式转换上述数据集:
SUBD | WK | Per
0 | X1 | .789
0 | X2 | .655
1 | X1 | .889
1 | X2 | .998
我尝试过重塑,融化,投射,收集R中的功能但是无法获得所需的输出?任何人都可以帮我实现这个目标吗?
答案 0 :(得分:3)
我会使用tidyr
。
library(tidyr)
tmp <- read.delim(text = "SUBD | X1 | X2
0 |.789|.655
1 |.889|.998", sep = "|")
gather(tmp, WK, Per, -SUBD)
#SUBD WK Per
#1 0 X1 0.789
#2 1 X1 0.889
#3 0 X2 0.655
#4 1 X2 0.998
答案 1 :(得分:1)
当您使用data.table
时,以下内容会为您提供您想要的内容。
TT <- melt.data.table(TT, id.vars="SUBD", variable.name="WK", value.name="Per")
TT[order(SUBD)]
首先,将您的数据转换为data.table
。我根据你的例子创建了表格。
TT <- data.table(SUBD <- c(0, 1),
X1 <- c(.789, .889),
X2 <- c(.655, .998))
names(TT) <- c("SUBD", "X1", "X2")
其次,使用melt.data.table
融化。最后排序如图所示。结果就是你想要的。
SUBD WK Per
1: 0 X1 0.789
2: 0 X2 0.655
3: 1 X1 0.889
4: 1 X2 0.998
如果您想了解融合和演员操作,请参阅本文here。
答案 2 :(得分:1)
怎么样:
library("reshape")
df <- data.frame(SUBD = c(0,1), X1 = c(.789, .889), X2 = c(.655, .998))
reshape::melt(df, id = c("SUBD"))