【问题标题】:Summing up selected row duplicates总结选定的行重复项
【发布时间】:2020-02-20 15:06:48
【问题描述】:

我有这样的数据。

我希望总结具有相同名称、时间和站点的行的值列。在这种情况下,将对第 3 行和第 4 行求和,对第 5 和第 7 行求和。

我希望生成的数据框看起来像这样。

示例数据:

    name = c('a', 'a', 'b' , 'b', 'c', 'c', 'c', 'd')
    time = c(1,2,1,1,3,3,3,4)
    site = c('A', 'A', 'A', 'A','B', 'D','B', 'E')
    value = c(5,8,1,0,7,0,8,10)

mock = data.frame(name, time,site,value)

【问题讨论】:

标签: r sum duplicates aggregate tidyverse


【解决方案1】:

我真的很喜欢 data.table 这样做的方式:

library(data.table)
data[, .(value = sum(value)), by = list(name, time, site)]

   name time site value
1:    a    1    A     5
2:    a    2    A     8
3:    b    1    A     1
4:    c    3    B    15
5:    c    3    D     0
6:    d    4    E    10

data.table 的好处是第一列中的行顺序不会改变,而aggregate() 会改变它。

【讨论】:

    【解决方案2】:

    这是一个整洁的答案:

    mock <- mock %>%
      group_by(name, time, site) %>%
      summarize(value = sum(value))
    
      name   time site  value
      <fct> <dbl> <fct> <dbl>
    1 a         1 A         5
    2 a         2 A         8
    3 b         1 A         1
    4 c         3 B        15
    5 c         3 D         0
    6 d         4 E        10
    

    【讨论】:

      【解决方案3】:

      您可以使用 base R aggregate 来制作它,即,

      > aggregate(value~.,mock,sum)
        name time site value
      1    a    1    A     5
      2    b    1    A     1
      3    a    2    A     8
      4    c    3    B    15
      5    c    3    D     0
      6    d    4    E    10
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-06-07
        • 1970-01-01
        • 1970-01-01
        • 2023-02-16
        • 1970-01-01
        • 2020-05-17
        • 2017-12-09
        相关资源
        最近更新 更多