【问题标题】:Applying a dplyr function to all variables at once一次将 dplyr 函数应用于所有变量
【发布时间】:2021-01-16 03:56:16
【问题描述】:

我有一个带有数字变量(“数字”)和几个因子变量(因子 0 和 1(FALSE,TRUE)或 0 到 4(病理状态))的数据框。我想总结每个组(0 到 1、0 到 4)的“数字”的中位数和 IQR。

有没有一种方法可以将此函数应用于数据集中的每个因子列,而不必逐个键入一个变量?

`library(dplyr)
 group_by(df, othervariable) %>%
  summarise(
  count = n(),
  median = median(numeric, na.rm = TRUE),
  IQR = IQR(numeric, na.rm = TRUE)
)`

输出:

othevariable count median   IQR
      <dbl> <int>  <dbl> <dbl>
1       0   100   2.46  2.65
2       1   207   3.88  5.86    

【问题讨论】:

    标签: r dplyr summarize group-summaries


    【解决方案1】:

    如果您的数据集仅包含感兴趣的分组变量和numeric,您可以使用purrr 的函数mapsummarise 语句应用于每个组。

    library(dplyr)
    
    purrr::map(names(df %>% select(-numeric)), function(i) {
      df %>% 
        group_by(!!sym(i)) %>% 
        summarize(
          count = n(),
          median = median(numeric, na.rm = TRUE),
          IQR = IQR(numeric, na.rm = TRUE)
        )
    })
    

    输出应该是一个数据框列表,每个元素对应一个分组变量及其汇总结果。

    【讨论】:

    • 感谢您提供有关 across 的信息。但是此代码输出将数字行中的每个值作为一个组。我要计算的是变量 1 中的第 0 组和第 1 组、变量 2 中的第 0 组和第 1 组等的“数字”中位数......
    • 很抱歉,但我不认为我理解您想要实现的目标。您能否将函数 dput(df) 的输出粘贴到您的问题中,以便我有您的样本数据集?
    • 很抱歉我无法准确地解释自己。这是一个如此大的数据集,包含个人数据,抱歉。在大约 300 名患者(行)中,我有一个连续的数值变量“基因表达”和 77 列具有 2 个因子(0 和 1,例如“它不存在这种临床特征”和“它存在”)的分类变量。我想在每列的每个组(0和1)中获得基因表达的中位数和IQR。我可以用 spss 来做,但我更喜欢直接将这些数据导出为 pdf 或 xls 的更有效方式,而不是处理 SPSS 的输出格式。
    • @dracoplasma 有了这个解释,我相信你说得更清楚了,谢谢。我编辑了我的答案,请检查这是否是您想要实现的目标。
    • 完美运行!谢谢!只需要用 R Markdown 将它编织成一个整洁的 pdf,我会搜索出来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-19
    • 2014-05-03
    • 1970-01-01
    • 2014-06-28
    • 1970-01-01
    • 2016-08-04
    相关资源
    最近更新 更多