背景:我正在处理出发地-目的地数据。我想计算每对城市之间的比例流量。但是,我发现很难按每对城市聚合数据,因为这些城市对涉及列条目的排列。我可以使用大量 for 循环和条件通过暴力来完成此操作,但这需要很长时间才能计算。
具体来说给定以下形式的矩阵:
Origin Destination Flow
a b f1
b a f2
c d f3
d c f4
我想计算聚合
Pair Flow
a,b f1+f2
c,d f3+f4
我尝试通过反转起点-目标列、附加到原始数据集、按起点和目标列聚合、使用 xtabs 创建对称矩阵,然后仅取上三角形来实现此目的。然而,这看起来并不能正常工作。
这是一种解决方案:
library(dplyr)
df$pair <- ifelse(df$Destination < df$Origin,
paste(df$Destination, df$Origin, sep = ','),
paste(df$Origin, df$Destination, sep = ','))
df %>% group_by(pair) %>% summarise(Flow = paste(Flow, collapse = ' + '))
Source: local data frame [2 x 2]
pair Flow
(chr) (chr)
1 a,b f1 + f2
2 c,d f3 + f4
Flow 列显然是使用字符向量粘贴的,因为这就是您给出的。您可以修改为sum(Flow)
如果你有数值。
编辑:抱歉,早些时候,我总结了错误的列。固定的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)