使用R中的reshape2函数来融合和附加数据

时间:2012-02-03 01:57:15

标签: r reshape

这应该很简单,但出于某种原因,我被卡住了。我的数据看起来像

A <- data.frame(x=rnorm(10), y=rnorm(10), z=rnorm(1))
B <- data.frame(x=rnorm(10), y=rnorm(10), z=rnorm(1))
C <- data.frame(x=rnorm(10), y=rnorm(10), z=rnorm(1))

method1 <- list(A=A,B=B,C=C)
method2 <- list(A=A,B=B,C=C)

biglist <- list(method1, method2)

我想将数据重新格式化为

x y z   dataset  method
- - -   ---       -----
1 1 1    A          1
1 0 2    A          1
1 0 3    A          1
1 1 3    A          1
1 1 1    B          1
1 0 2    B          1
1 0 3    B          1
1 1 3    B          1
1 1 1    C          1
1 0 2    C          1
1 0 3    C          1
1 1 3    C          1
1 1 1    A          2
1 0 2    A          2
1 0 3    A          2
1 1 3    A          2
1 1 1    B          2
1 0 2    B          2
...
熔化并不能完全符合我的要求,因为它会折叠我的x / y / z变量标题。

1 个答案:

答案 0 :(得分:6)

您的data.frames应该有一个主键, 例如,标识符列或具有唯一值的列 - 否则,你最终会得到x,y,z 几个不相关行中一个点的坐标。 我将假设x就是这样一个专栏。

您可能还需要在dcast之后致电melt, 如果生成的data.frame太垂直。

library(reshape2)
d <- melt(biglist, id.vars="x")
d <- dcast( d, L1 + L2 + x ~ variable )