如何将行转换为R中的列?

时间:2017-03-15 00:00:47

标签: r data-analysis

我有一个数据集如下:

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中的功能但是无法获得所需的输出?任何人都可以帮我实现这个目标吗?

3 个答案:

答案 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"))