r - 如何查找和求和两列的重复值?
问题描述
我有一个像这样的三个变量的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 混合。请帮帮我。
解决方案
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
推荐阅读
- pine-script - 多种工具/合约的累计交易量
- wso2 - wso2 api mnager analytics dashborad 显示 api 名称但不显示用法
- php - 您的主机需要使用 PHP 5.3 或更高版本来运行此版本的 Joomla!WAMP 上的 Joomla 3.3.1 和带有 XAMPP localhost 服务器的 http 错误 500 php
- excel - SAS:如何在 Excel 工作表中导出更多表格
- php - 自定义验证不调用 pass() 函数
- materialize - Materialise Model - 下面的内容是可见的
- postgresql - 如何在 PostgreSQL 中获取完整的语句
- sql - 如何获取最大日期及其行的总和 SQL
- r - 使用 500 行参考文件创建具有 5000 行的数据框
- rsocket - 如何通过在 Rsocket-CPP 中使用请求/响应来接收超过 4KB 的数据