【问题标题】:R, Aggregate Summing Across All Values in Reference Column (Instead of Just One)R,参考列中所有值的汇总求和(而不仅仅是一个)
【发布时间】:2018-02-09 22:34:12
【问题描述】:

我尝试了几种不同的方法来获得一个以半小时为单位的平均值汇总表,类似于平均数据透视表。我首选的方法是聚合,但我似乎只得到了第一行的平均值。

数据如链接所示,其中 Group 和 Messages 可以忽略。 See below.

我使用的代码是……

Data <- read_csv("P:/Book3.csv", col_types = cols(Date = col_date(format = "%m/%d/%Y"), 
                                                  Time = col_time(format = "%H:%M:%S")))
View(Data)

class(Data)
[1] "tbl_df"     "tbl"        "data.frame"

aggregate(Data[, 3:4], list(Data$Time), mean)

   Group.1    Calls Estimated_Calls
1 08:30:00 15.38889        14.55556

您会注意到单行,但理想情况下,输出将具有每次的平均值。

任何帮助都会很棒。谢谢。

【问题讨论】:

  • 我们可以使用summarise_allsummarise_atsummarise_ifgroup_by来聚合来自dplyr的数据。如果你可以分享Book3.csv,我们或许可以演示如何做到这一点。
  • 最好包含您的数据而不是数据图片。尝试dput(Data) 并编辑您的问题以包含该命令的输出。

标签: r aggregate average mean


【解决方案1】:

我喜欢使用dplyr 库来解决这类问题:

library(dplyr)
Data %>% group_by(Time) %>% 
    summarise(Mean_Calls = mean(Calls), Mean_Est_Calls = mean(Estimated_Calls))

我发现管道%&gt;% 使代码更易于阅读(一旦你习惯了它)。这是dplyr 库的一项功能。

【讨论】:

    【解决方案2】:

    我更喜欢使用data.table 进行这样的汇总操作:

    setDT(Data)
    
    Data[, .(Mean_Calls = mean(Calls), Mean_Est_Calls = mean(Estimated_Calls)),
        by=.(Group, Time)]
    

    这将按组和时间分组,这意味着组和时间的每个组合都有一行。

    使用虚拟数据(使用 3 个“小时”作为时间;还将 by 更改为 keyby 以进行排序):

    set.seed(48)
    
    df1 <- data.table(Group = sample(LETTERS[1:3],10,T),
     Time = sample(1:3,10,T),
     Calls = sample(1:50,10,T),
     Estimated_Calls = sample(1:50,10,T))
    
    df1[, .(Mean_Calls = mean(Calls), Mean_Est_Calls = mean(Estimated_Calls)),
            keyby=.(Group, Time)]
    

    输出:

       Group Time Mean_Calls Mean_Est_Calls
    1:     A    2   27.00000       22.00000
    2:     A    3   34.66667       25.66667
    3:     B    2   26.00000        6.50000
    4:     B    3   20.00000        1.00000
    5:     C    2   35.50000       32.00000
    

    aggregate:

    df2 <- aggregate(df1[,3:4], by=with(df1,list(Group,Time)),mean)
    

    【讨论】:

    • 非常感谢。我会使用它,但在正确安装 data.table 包时遇到了一些麻烦(安装但似乎从未找到该功能)。在网上搜索,这似乎是一个普遍的问题。很高兴知道这一点!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    相关资源
    最近更新 更多