我在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
答案 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