首页 > 解决方案 > 如何根据另一个数据框中的值摘要在 R 中填充数据框?

问题描述

我有一个充满类别的数据框,每个类别都有一个相关的 p 值。我想创建一个包含两列的新数据框:

  1. 一系列 pvalue
  2. 第一个数据帧中 pvalue 低于该阈值的类别数

所以,理想情况下是这样的:

|pVal |SigCats|
|-----|-------|
|0.05 |  100  |
|0.01 |  80   |
|0.001|  50   |

如何生成此数据框?

这是一个示例数据集:

  set.seed(42) 
  n = 20
  sourceDat <- data.frame(id=1:n, 
                    group=rep(LETTERS[1:2], n/2),
                    p_value=sample(1:10, n, replace=TRUE)/500)

我知道我可以通过以下方式计算符合特定标准的类别数量:

sum(sourceDat$p_value < 0.01) #for categories with pvalues less than 0.01

但我不知道如何使用这个函数来填充数据框。我在下面的尝试给了我一个错误......

pVals   <- c(0.05,10^seq(from = -2, to = -20,by= -1))
pValDat <- data.frame(x=pVals)
pValDat <- pValDat %>%
    dplyr::mutate(sigCats = sum(sourceDat$p_value < x))

我最熟悉base R和tidyverse

标签: rdataframedplyr

解决方案


我使用 dplyr 的 rowwise 函数解决了这个问题:

pValDat <- data.frame(x=10^seq(from = -2, to = -20,by= -1))
pValDat %>%
    rowwise %>%
    mutate(sigCats = sum((sourceDat$pvalue < x)))

推荐阅读