基于来自第二数据帧的因子对组值进行求和

时间:2015-01-27 09:49:07

标签: r

我有两个数据框 - 一个包含所有样本的列表(样本ID,区域等)(sampleid.df),另一个包含每个样本中的计数列表(obs.count)。我需要的是一个列出所有样本的表,并提供所有obs.measur的总和(通过sampleid) - 此外,返回没有计数的样本应该得到0.我尝试了聚合并合并,但长度的差异是一个问题。任何想法/建议都非常赞赏。

sampleid.df <- data.frame(sampleid = 1:20)
sampleid.df$sampleid <- as.factor(sampleid.df$sampleid)

obs.count  <- data.frame(counts = c(sample(1:50,15,rep=TRUE)), sampleid = c(sample(1:20,15,rep=TRUE)))

1 个答案:

答案 0 :(得分:1)

您可以使用选项merge尝试all=TRUE,以便输出(&#34; df1&#34;)将为&#34;样本&#34;来自&#34; sampleid.df&#34;在&#34; obs.count&#34;的同一列中没有匹配项。然后使用aggregate选项na.action=na.pass(默认情况下,选项为na.action=na.omit)也包含NA行。在na.rm=TRUE中使用sum删除NAs,但如果是特定的&#34; sampleid&#34;只有NA,它将返回NA。

df1 <- merge(sampleid.df, obs.count, all=TRUE)
res <- aggregate(counts~sampleid, df1, sum, na.rm=TRUE, na.action=na.pass)
res$counts[is.na(res$counts)] <- 0