【问题标题】:aggregate multiple columns in a data frame at once calculating different statistics on different columns - R一次聚合数据框中的多列计算不同列的不同统计信息 - R
【发布时间】:2021-09-24 18:46:57
【问题描述】:

我正在尝试执行一个简单的练习,即按第一列聚合数据框中的列。每列都使用汇总统计信息进行汇总,但它们并不相同。例如,几列我需要平均值,几列我需要标准偏差,几列我需要最大值等。我在 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

【问题讨论】:

    标签: r aggregate


    【解决方案1】:

    我们可以使用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))
    

    或者从collapse使用collap

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

    【讨论】:

    • 谢谢你!我从上面复制了我的结果。我遇到的一个问题是 sd(v2) 的摘要是 NaN。你能帮我解决这个问题吗?
    • @DataScienceDave 您在帖子中指定的大多数函数默认具有na.rm = FALSE,将其更改为 TRUE(如更新中所示)。对于collapse,函数默认有na.rm = TRUE
    • @DataScienceDave sd 如果该组只有一个观察值,则返回 NA 即sd(5, na.rm = TRUE) [1] NA
    • 谢谢@akrun,但是我正在测试的数据有很多观察结果,没有 NA 值,并且使用 str() 它们都是整数。使用您的更新后,我仍然收到错误消息。知道我做错了什么吗?另外,如何使用摘要统计信息更新 df1。我想用这个进行集群练习
    • 不,我不敢相信我做到了!你是对的,我的样本数据没有正确的数据。非常感谢你的帮助。我扩展了数据,效果很好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 2021-04-10
    • 2023-02-21
    • 1970-01-01
    • 2016-03-02
    相关资源
    最近更新 更多