2012-04-26 36 views
6

假设我有一种融化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 

似乎微不足道,但我消隐的答案。 dcastacast似乎不这样做。我的目标是在较大的数据集上执行此操作,并将最终产品变为matrix,列名称为变量名称。我尝试使用daplylaply(在融化之前)没有多少运气。

回答

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做到这一点,因为我也多次尝试,并没有能。

+0

我不认为'dcast'可以不添加另一列,因为'variable'列本身并不能唯一地标识每个数据点。放得更松散,它不知道将哪些行放入值。 – Aaron 2012-04-26 01:54:16

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) 
+0

如果可能的话,这个id在融化前更容易添加。 (这似乎是在OPs的情况下,如上所述。) – Aaron 2012-04-26 01:52:05

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