Можно сгруппировать по row_number()
до sort
и объединить столбцы в отсортированном порядке, чтобы создать независимый заказ pair
.
Примечание: Приведенное ниже решение может работать и для пары более 2 столбцов. например, A B C
, A C B
или B C A
как одна и та же группа.
library(dplyr)
library(tidyr)
df %>%
group_by(row_number()) %>%
mutate(xy = paste0(sort(c(x,y)),collapse=",")) %>%
group_by(xy) %>%
summarise(val = sum(val)) %>%
separate(xy, c("x","y"))
## A tibble: 3 x 3
# x y val
#* <chr> <chr> <int>
#1 A B 12
#2 A C 4
#3 B C 9
Данные:
df <- read.table(text =
"x y val
A B 5
A C 3
B A 7
B C 9
C A 1",
header = TRUE, stringsAsFactors = FALSE)