我有两个数据框 - 一个包含所有样本的列表(样本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)))
答案 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