7

假设我有一个data.frame看起来像这样的融化:

  variable       value
1         A -0.19933093
2         A -1.19043346
3         A -1.32248172
4         A -1.98644507
5         A -0.07930953
6         B -0.10074686
7         B  0.72451483
8         B -0.40914044
9         B  0.02913376
10        B  0.16062491

我如何得到它:

  A       B
-0.19933093 -0.10074686
-1.19043346  0.72451483
-1.32248172 -0.40914044
-1.98644507  0.02913376
-0.07930953  0.16062491

似乎微不足道,但我正在回答一个空白。dcast并且acast似乎没有这样做。我的目标是在更大的数据集上执行此操作,并将最终产品转换为matrix列名作为变量名的列名。我试着玩daplyand laply(在融化之前)没有太多运气。

4

3 回答 3

9

尝试unstack

dat <- read.table(text = "variable       value
1         A -0.19933093
2         A -1.19043346
3         A -1.32248172
4         A -1.98644507
5         A -0.07930953
6         B -0.10074686
7         B  0.72451483
8         B -0.40914044
9         B  0.02913376
10        B  0.16062491",sep = "",header = TRUE)

> unstack(dat,value~variable)

            A           B
1 -0.19933093 -0.10074686
2 -1.19043346  0.72451483
3 -1.32248172 -0.40914044
4 -1.98644507  0.02913376
5 -0.07930953  0.16062491

但我应该补充一点,我很想知道如何使用 来做到这一点dcast,因为我也反复尝试过但无法做到。

于 2012-04-26T01:10:07.003 回答
4

好的,从包含 id 的宽格式数据框开始。melt()它给出长格式,然后dcast()返回原始数据框。

library(reshape2)
df = read.table(text = "id   A   B
1  1 -0.19933093 -0.10074686
2  2 -1.19043346  0.72451483
3  3 -1.32248172 -0.40914044
4  4 -1.98644507  0.02913376
5  5 -0.07930953  0.16062491", sep = "", header = TRUE)

df

df.melt = melt(df, "id")
df.melt

df.original = dcast(df.melt, id~variable)

df.original
于 2012-04-26T02:06:43.583 回答
2

用于acast()返回一个矩阵。它需要一个 id 变量。

library(reshape2)
dat <- read.table(text = "variable       value
1         A -0.19933093
2         A -1.19043346
3         A -1.32248172
4         A -1.98644507
5         A -0.07930953
6         B -0.10074686
7         B  0.72451483
8         B -0.40914044
9         B  0.02913376
10        B  0.16062491",sep = "",header = TRUE)

dat$id = rep(1:5, 2)
dat

acast(dat, id~variable)
于 2012-04-26T01:48:31.907 回答