假设我有一个看起来像这样的融合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
,其中列名称为变量名称。我尝试使用daply
和laply
(在融化之前)没有太多运气。
答案 0 :(得分:8)
尝试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
来做到这一点,因为我也反复尝试过并且无法做到。
答案 1 :(得分:3)
好的,从包含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
答案 2 :(得分: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)