Мы можем использовать pmin/pmax
для создания группирующей переменной и должны быть более эффективными
library(dplyr)
df %>%
count(V2N = pmin(V2, V3), V3N = pmax(V2, V3))
# A tibble: 2 x 3
# V2N V3N n
# <chr> <chr> <int>
#1 A B 2
#2 C D 3
Тесты
df1 <- df[rep(seq_len(nrow(df)), 1e6),]
system.time({
df1 %>%
count(V2N = pmin(V2, V3), V3N = pmax(V2, V3))
})
#user system elapsed
# 1.164 0.043 1.203
system.time({
df2 <- data.frame(t(apply(df1[-1], 1, sort)))
df2 %>%
group_by_all() %>%
summarise(Freq = n())
})
# user system elapsed
# 160.357 1.227 161.544
data
df <- structure(list(V1 = 0:4, V2 = c("A", "B", "C", "D", "C"), V3 = c("B",
"A", "D", "C", "D")), row.names = c(NA, -5L), class = "data.frame")