首页 > 解决方案 > 如何查找和求和两列的重复值?

问题描述

我有一个像这样的三个变量的df:

  ORI  DEST  PAX   
1 bog  mde   260
2 mde  bog   240
3 clo  bog   120
4 bog  ctg   50
5 ctg  bog   30
6 bog  clo   100

我想对 ORI 和 DEST 的相等行求和。例如,第 1 行和第 2 行相等,因为 bog-mde 等于 mde-bog。所以 PAX 等于 260 + 240 = 500。我想要这样的输出:

  ORI_DEST       PAX   
1 bog-mde-bog   500
2 clo-bog-clo   220
3 bog-ctg-bog   80

如何查看、匹配和求和第 1 行与第 2 行、第 3 行与第 6 行以及第 4 行与第 5 行。这类似于将 vlookup 与 sum 混合。请帮帮我。

标签: r

解决方案


aggregate(df["PAX"],
          list(ORI_DEST = apply(df[1:2], 1, function(x)
              paste(sort(x), collapse = ", "))),
          sum)
#  ORI_DEST PAX
#1 bog, clo 220
#2 bog, ctg  80
#3 bog, mde 500

或使用igraph

library(igraph)
g = graph.data.frame(df[c("ORI", "DEST")], directed = FALSE)
E(g)$weight = df$PAX
g2 = simplify(g, edge.attr.comb="sum")
data.frame(get.edgelist(g2), PAX = E(g2)$weight)
#   X1  X2 PAX
#1 bog mde 500
#2 bog clo 220
#3 bog ctg  80

推荐阅读