重塑数据表以使列名成为行名

时间:2015-04-13 07:21:44

标签: r data.table reshape reshape2

我在data.table

中有一个R
> dt
  SAMPLE   junction count
1: R1        a       1
2: R2        a       1
3: R3        b       1
4: R3        a       1
5: R1        c       2

现在我想“重塑”数据表以形成data frame m(基本上通过样本矩阵连接,索引值为对应的计数值)。另外,请注意,对于(SAMPLE,junction)中不存在的dt对,我假设相应的count值为zero。 有人可以帮助我如何实现这一目标吗?

> m
      R1   R2   R3
  a    1    1    1
  b    0    0    1
  c    2    0    0

2 个答案:

答案 0 :(得分:11)

来自dcast的{​​{1}}更改数据集来自长期'广泛的'格式。

data.table

如果您需要矩阵输出

library(data.table)#v1.9.5+
dcast(dt, junction~SAMPLE, value.var='count', fill=0)
#   junction R1 R2 R3
#1:        a  1  1  1
#2:        b  0  0  1
#3:        c  2  0  0

library(reshape2) acast(dt, junction~SAMPLE, value.var='count', fill=0) # R1 R2 R3 #a 1 1 1 #b 0 0 1 #c 2 0 0 来自xtabs

base R

答案 1 :(得分:5)

使用spread中的tidyr替代方法:

library(tidyr)

spread(dt, SAMPLE, count, fill=0)
#   junction R1 R2 R3
#1:        a  1  1  1
#2:        b  0  0  1
#3:        c  2  0  0

来自reshape的{​​{1}}的旧学校解决方案:

stats

数据:

reshape(dt, timevar='SAMPLE', idvar=c('junction'), direction='wide')
#   junction count.R1 count.R2 count.R3
#1:        a        1        1        1
#2:        b       NA       NA        1
#3:        c        2       NA       NA