我有一个包含三列 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)
我们可以使用pmin和pmax将不同顺序的组视为相同然后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)