我在将 data.frame 中的列堆叠成一列时遇到问题。
现在我的数据看起来像这样:
id time black white red
a 1 b1 w1 r1
a 2 b2 w2 r2
a 3 b3 w3 r3
b 1 b4 w4 r4
b 2 b5 w5 r5
b 3 b6 w6 r6
我正在尝试转换 data.frame 使其看起来像这样:
id time colour
a 1 b1
a 2 b2
a 3 b3
b 1 b4
b 2 b5
b 3 b6
a 1 w1
a 2 w2
a 3 w3
b 1 w4
b 2 w5
b 3 w6
a 1 r1
a 2 r2
. . .
. . .
. . .
我猜这个问题需要使用 reshape 包,但我不确定如何使用它将多列堆叠在一列下。任何人都可以提供帮助吗?
最佳答案
由于您在标题中提到“堆叠”,您还可以查看stack
基础 R 中的函数:
cbind(mydf[1:2], stack(mydf[3:5]))
# id time values ind
# 1 a 1 b1 black
# 2 a 2 b2 black
# 3 a 3 b3 black
# 4 b 1 b4 black
# 5 b 2 b5 black
# 6 b 3 b6 black
# 7 a 1 w1 white
# 8 a 2 w2 white
# 9 a 3 w3 white
# 10 b 1 w4 white
# 11 b 2 w5 white
# 12 b 3 w6 white
# 13 a 1 r1 red
# 14 a 2 r2 red
# 15 a 3 r3 red
# 16 b 1 r4 red
# 17 b 2 r5 red
# 18 b 3 r6 red
如果“黑色”、“白色”和“红色”列中的值为
factor
s,您需要将它们转换为 character
值(value)观第一。cbind(mydf[1:2], stack(lapply(mydf[3:5], as.character)))
关于r - 将data.frame中的列堆叠成R中的一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13597091/