如何以 R dplyr 特定方式 group_by?

use*_*682 2 r dplyr

我有一个包含三列 FROM、TO(从方向、方向到)和 COUNT 列的 data.frame:

FROM, TO, COUNT
A, B, 3
B, A, 4
C, D, 1
X, Y, 6
D, C, 9
Run Code Online (Sandbox Code Playgroud)

如果 data.frame 中存在相反的方向,我需要按行分组并对 COUNT 求和。

预期结果

FROM, TO, COUNT
A, B, 7  <------- (A, B) 3 + 4 (B,A)
C, D, 10 <- (C, D) 1 + 9 (D,C)
X, Y, 6  <- stays as there is no opposite Y to X
Run Code Online (Sandbox Code Playgroud)

Ron*_*hah 5

我们可以使用pminpmax将不同顺序的组视为相同然后sum每个组。

dplyr你可以这样做 -

library(dplyr)

df %>%
  group_by(col1 = pmin(FROM, TO), col2 = pmax(FROM, TO)) %>%
  summarise(COUNT = sum(COUNT)) %>%
  ungroup
Run Code Online (Sandbox Code Playgroud)

或者在基础 R -

aggregate(COUNT~FROM + TO, 
           transform(df, FROM = pmin(FROM, TO), TO = pmax(FROM, TO)), sum)

#  FROM TO COUNT
#1    A  B     7
#2    C  D    10
#3    X  Y     6
Run Code Online (Sandbox Code Playgroud)