2012-08-16 38 views
0

可能重複:
split and combine by factor into new columns變換data.frame成稀疏表(與NAS)

這裏使用的示例性數據,以方便說明的目的。 我有完整的希臘字母作爲我的樣本集。 我也有完整的拉丁字母。

我目前正在使用一張看起來像這樣的表格。這將是一個小子集。我的實際數據是成千上萬的行。

sample call letter 
alpha y  A 
alpha y  D 
alpha n  C 
beta y  F 
beta y  B 
gamma n  F 
gamma y  B 
gamma n  A 
delta m  E 
epsilon n  F 
epsilon n  C 
epsilon n  B 
zeta m  A 
zeta y  D 

我想作最後的表,其中的希臘字母是行和列的拉丁字母,我會只提供「呼叫」可用時,否則NA或0可以進入。

最終結果會是這樣的。

 A B C D E F 
alpha y NA n y NA NA 
beta NA y NA NA NA y 
gamma n y NA NA NA n 
delta NA NA NA NA m NA 
epsilon NA n n NA NA n 
zeta m NA NA y NA NA 

任何想法如何能實現這樣的事情?即使是一個普遍的指針,什麼是好的。

在此先感謝。

+0

我最近幾次回答了這個問題。 [這裏](http://stackoverflow.com/questions/11990830/using-multiple-variables-in-plyr/11991155#11991155)和[這裏](http://stackoverflow.com/questions/11954948/split-and -combine逐因子進入新柱/ 11955053#11955053)。投票結束重複。 – Justin 2012-08-16 20:49:05

+0

@Justin:但它並沒有阻止你回答_again _... :) – 2012-08-16 21:04:43

回答

1

dcastreshape2包做到這一點很好

library(reshape2) 
dat <- structure(list(sample = c("alpha", "alpha", "alpha", "beta", "beta", "gamma", "gamma", "gamma", "delta", "epsilon", "epsilon", "epsilon", "zeta", "zeta"), call = c("y", "y", "n", "y", "y", "n", "y", "n", "m", "n", "n", "n", "m", "y"), letter = c("A", "D", "C", "F", "B", "F", "B", "A", "E", "F", "C", "B", "A", "D")), .Names = c("sample", "call", "letter"), class = "data.frame", row.names = c(NA, -14L)) 

dcast(dat, sample ~ letter, value.var='call') 


    sample A B C D E F 
1 alpha y <NA> n y <NA> <NA> 
2 beta <NA> y <NA> <NA> <NA> y 
3 delta <NA> <NA> <NA> <NA> m <NA> 
4 epsilon <NA> n n <NA> <NA> n 
5 gamma n y <NA> <NA> <NA> n 
6 zeta m <NA> <NA> y <NA> <NA> 
+0

擊敗了我2秒! – Maiasaura 2012-08-16 20:51:06