【问题标题】:sum group values based on factor from second data frame根据来自第二个数据帧的因子对组值求和
【发布时间】:2015-01-27 09:49:06
【问题描述】:

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

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以尝试merge 和选项all=TRUE,这样输出(“df1”)将具有来自“sampleid.df”的“sampleids”的NA,在“obs.df”的同一列中没有匹配项。数数”。然后使用aggregate 和选项na.action=na.pass(默认情况下,选项是na.action=na.omit)来包含NA 行。在 sum 中使用 na.rm=TRUE 删除 NAs 但如果特定的“sampleid”只有 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-13
      • 1970-01-01
      • 2018-07-23
      • 2020-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多