我正在尝试计算 R 数据框中两个变量的组合出现次数。
如果我有以下数据框:
df <- data.frame(v1 = c("A", "A", "B", "B"),
v2 = c("B", "C", "C", "A"))
v1 v2
A B
A C
B C
B A
我正在尝试计算两个变量的组合,其中“AB”将被视为与“BA”相同。 我想最终得到这样的结果:
comb n
A,B 2
A,C 1
B,C 1
我尝试使用
count(df, v1, v2)
但是AB和BA是分开算的。 任何建议将不胜感激!
您需要先
paste
将两列一起排序,然后count
。
library(dplyr)
df |>
rowwise() |>
mutate(combn = paste0(sort(c(v1, v2)), collapse = ",")) |>
count(combn) |>
ungroup()
# A tibble: 3 × 2
combn n
<chr> <int>
1 A,B 2
2 A,C 1
3 B,C 1
使用
pmin
和 pmax
可能对这个简单的示例有所帮助:
mutate(df, v12=paste0(pmin(v1, v2), pmax(v1, v2))) |>
count(v12)
v12 n
1 AB 2
2 AC 1
3 BC 1
请注意,此处使用 .$v1 而不仅仅是 v1 很重要,否则 v2= 将使用刚刚计算的修订版 v1 而不是原始 v1。
df %>% count(v1 = pmin(v1, v2), v2 = pmax(.$v1, v2))
如果可以在输出中使用 V1 和 V2(大写),则可以简化为:
count(df, V1 = pmin(v1, v2), V2 = pmax(v1, v2))