通过列值的排列在R中聚合

时间:2016-04-26 17:05:01

标签: r aggregate

背景:我正在使用原始目标数据。我想计算每对城市之间的比例流量。但是,我发现很难通过每对城市汇总数据,因为这些对涉及列条目的排列。我可以通过使用大量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创建对称矩阵,然后仅获取上三角形来实现此目的。但是,这看起来并没有正常工作。

1 个答案:

答案 0 :(得分:2)

这是一个解决方案:

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)

编辑:对不起,早些时候,我总结了错误的专栏。固定的。