代码之家  ›  专栏  ›  技术社区  ›  Mark

删除重复行并对数据帧中最后一列的相应值求和

  •  1
  • Mark  · 技术社区  · 5 年前

    如果我们想从数据帧中删除重复项 df ,我们只需要写 df[!duplicated(df),] 复制品将被删除。我有以下数据框:

    df <- data.frame(from = c("z","y","z","w","y"), to=c("x","w","x","z","w"), weight=c(2,1,3,5,6))
    

    我想得到一些不同的东西。在 df[,1:2] ,第一行和第三行之间是相等的,我想:1)删除其中一行;2)对相应的权重值求和。E、 g.对于本例,预期结果是:

       from to weight
         z  x      5
         y  w      7
         w  z      5
    

    无论如何,如果我使用:

    df2=df[,1:2]
    which(duplicated(df2) | duplicated(df2[nrow(df2):1, ])[nrow(df2):1])
    

    我得到

    [1] 1 2 3 5
    

    1 回复  |  直到 5 年前
        1
  •  2
  •   akrun    5 年前

    我们可以通过 sum 操作而不是 duplicated

    aggregate(weight~ ., df, sum)
    

    dplyr ,可以使用

    library(dplyr)
    df %>%
       group_by(from, to) %>%
       summarise(weight = sum(weight))
    
        2
  •  0
  •   Hussain Ali    5 年前