【问题标题】:Is there a way on R to combine rows to make a total/average?R上有没有办法组合行来计算总数/平均值?
【发布时间】:2020-05-27 08:03:07
【问题描述】:

我有一个大的 df,看起来像这样:

Name      Year    Runs   Average
J. Doe    2016    432    44.5
J. Doe    2017    325    37.4
J. Bloggs 2016    289    54.3

我想连接行,这样我就可以对每个名称进行总计,而不是按年份拆分。一些列,例如运行需要求和,其他例如平均值需要依赖于其他列的其他公式。 df 太大而无法手动执行,所以只要有重复的名称,我可以使用一个函数来组合这些行吗?

【问题讨论】:

    标签: r concatenation rows


    【解决方案1】:

    你可以使用dplyr:

    library(dplyr)
    df %>% 
      group_by(Name) %>% 
      summarise(sum_of_runs = sum(Runs),
                average_of_column_x = mean(column_x, na.rm = TRUE))
    

    【讨论】:

    • 我有类似的解决方案,但删除了我的答案。如果要维护其他列:df %>% group_by(Name) %>% mutate(Runs = sum(Runs), Overall_Avg = mean(Average))
    【解决方案2】:

    如果你想sumRuns 列并为Average 列中的mean 获取Name 中的每个唯一值,使用data.table 你可以这样做:

    library(data.table)
    setDT(df)[, .(Runs = sum(Runs), Avg = mean(Average)), Name]
    
    #       Name Runs  Avg
    #1:    J.Doe  757 41.0
    #2: J.Bloggs  289 54.3
    

    如果您有 NA 值,请在 summean 函数中添加 na.rm = TRUE

    数据

    df <- structure(list(Name = c("J.Doe", "J.Doe", "J.Bloggs"), Year = c(2016L, 
    2017L, 2016L), Runs = c(432L, 325L, 289L), Average = c(44.5, 
    37.4, 54.3)), class = "data.frame", row.names = c(NA, -3L))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-09
      • 2011-04-29
      • 2020-11-27
      • 2022-01-06
      • 2020-12-01
      • 2022-01-15
      • 1970-01-01
      • 2023-03-21
      相关资源
      最近更新 更多