2012-04-26 21 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