删除重复的行并汇总数据帧中最后一列的对应值

时间:2020-02-22 18:03:46

标签: r dataframe duplicates

如果我们要从数据帧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)求和相应的权重值。例如。对于此示例,预期结果是:

   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和3相等,2和5相等,但是后面的结果中不包含此信息)。

1 个答案:

答案 0 :(得分:2)

我们可以通过sum操作而不是duplicated进行分组

aggregate(weight~ ., df, sum)

dplyr中,可以使用

library(dplyr)
df %>%
   group_by(from, to) %>%
   summarise(weight = sum(weight))