首页 > 解决方案 > 一次聚合数据框中的多列计算不同列的不同统计信息 - R

问题描述

我正在尝试执行一个简单的练习,即按第一列聚合数据框中的列。每列都使用汇总统计信息进行汇总,但它们并不相同。例如,几列我需要平均值,几列我需要标准偏差,几列我需要最大值,等等。我在 R 中使用带有聚合函数的文档,但由于某种原因无法得到它。

你能帮我吗?

附件是一个简单的示例数据集。出于说明目的,我需要按“名称”列进行汇总。Var1 我需要平均值,Var2 我需要标准差,Var3 我需要最大值,Var4 我想要总和

name    v1  v2  v3  v4  v5
a     78    74  43  76  61
b     50    84  76  73  35
c     4    55   4   86  32
d     23    29  81  73  55
e     36    68  27  70  96

# A tibble: 11 x 5
   name     v1    v2    v3    v4
   <fct> <dbl> <dbl> <int> <int>
 1 a        78   NaN    43    76
 2 b        50   NaN    76    73
 3 c         4   NaN     4    86
 4 d        23   NaN    81    73
 5 e        36   NaN    27    70
 6 f        13   NaN    34    77
 7 g         2   NaN    57    79
 8 h        72   NaN    29     3
 9 i        17   NaN    56    14
10 j        87   NaN    36    13
11 k         9   NaN    74    41

标签: raggregate

解决方案


我们可以使用dplyr灵活性

library(dplyr)
df1 %>%
     group_by(name) %>% 
     summarise(v1 = mean(v1, na.rm = TRUE),
    v2 = sd(v2, na.rm = TRUE), v3 = max(v3, na.rm = TRUE),
            v4 = sum(v4, na.rm = TRUE))

如果要为不同的功能阻止多个列,请使用across

df1 %>%
    group_by(name) %>%
    summarise(across(c(v1, v2), mean, na.rm = TRUE),
               v3 = sd(v3, na.rm = TRUE),
               across(c(v4, v5), sum, na.rm = TRUE))

或使用collap来自collapse

library(collapse)
collap(df1, ~ name, custom = list(fmean = c("v1", "v2"),
      fsd = "v3", fsum = c("v4", "v5")))

推荐阅读