将data.frame转换为稀疏表(使用NAs)

时间:2012-08-16 20:43:57

标签: r dataframe

  

可能重复:
  split and combine by factor into new columns

此处使用示例数据以便于说明。 我有完整的希腊字母作为我的样本集。 我也有完整的拉丁字母。

我目前正在使用一个看起来像这样的表。这将是一小部分。我的实际数据是数十万行。

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

知道如何才能实现这样的目标吗?即使是一般指针也会很棒。

提前致谢。

1 个答案:

答案 0 :(得分:1)

来自dcast包的

reshape2很好地完成了

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>