2012-08-16 37 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