【问题标题】:aggregate and removes duplicates for some rows聚合并删除某些行的重复项
【发布时间】:2021-05-05 09:06:13
【问题描述】:

我有一个类似的数据集

df <- data.frame(id = c("a","a","b","b","c","d","e","f"),
                 val = c(1,2,3,4,5,6,7,8),
                 extracol = c("x",NA,"y","z","t","v","u","p"))

  id val extracol
1  a   1        x
2  a   2     <NA>
3  b   3        y
4  b   4        z
5  c   5        t
6  d   6        v
7  e   7        u
8  f   8        p

我想根据列 id 对值求和(并聚合),但仅针对“a”。所以我想得到类似的东西:

  id val extracol
1  a   3        x
2  b   3        y
3  b   4        z
4  c   5        t
5  d   6        v
6  e   7        u
7  f   8        p

我真的不在乎我是否在 extracol 中得到“x”或 NA。有什么建议吗?

【问题讨论】:

    标签: r duplicates aggregate


    【解决方案1】:

    这可行:

    library(dplyr)
    df <- data.frame(id = c("a","a","b","b","c","d","e","f"),
                     val = c(1,2,3,4,5,6,7,8),
                     extracol = c("x",NA,"y","z","t","v","u","p"))
    
    # keep only a
    a = df%>% filter(id == "a")
    
    # aggregate a
    a_agg= a %>% group_by(id) %>% summarise(val = sum(val), extracol = first(extracol))
    
    # drop a
    df = df %>% filter(id != "a")
    
    # append a
    df = rbind(df, a_agg)
    
    df
    
       id val extracol
    1  b   3        y
    2  b   4        z
    3  c   5        t
    4  d   6        v
    5  e   7        u
    6  f   8        p
    7  a   3        x
    

    【讨论】:

    • 如果只有一个 id 值,其实不需要按 id 分组
    • 真的!但如果应该处理更多值而不是a 可能会有用
    【解决方案2】:

    基本 R 选项

    with(
      df,
      rbind(
        data.frame(
          id = "a",
          val = sum(val[id == "a"]),
          extracol = na.omit(extracol[id == "a"])
        ),
        df[id != "a", ]
      )
    )
    

    给予

      id val extracol
    1  a   3        x
    3  b   3        y
    4  b   4        z
    5  c   5        t
    6  d   6        v
    7  e   7        u
    8  f   8        p
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-26
      • 1970-01-01
      • 1970-01-01
      • 2014-06-08
      • 2015-06-23
      • 2023-02-25
      • 2020-06-21
      • 2018-03-11
      相关资源
      最近更新 更多