我想计算对的频率。
数据框有两列多个因子变量,如下所示:
df
A1 A2
1 "A" "A"
2 "D" "C"
3 "B" "A"
4 "D" "C"
5 "D" "C"
6 "A" "B"
7 "B" "A"
8 "C" "D"
我的数据框有数百行和20个变量。
我尝试过plyr的计数功能:
count(df, c("A1", "A2"))
A1 A2 freq
1 A A 1
2 A B 1
3 B A 2
4 C D 1
5 D C 3
但我的目标是得到一个看起来像这样的结果:
A1 A2 freq
1 A A 1
2 A B 3
3 C D 4
答案 0 :(得分:1)
你可以这样做:
library(dplyr)
t(apply(df, 1, sort)) %>%
as.data.frame %>%
count(A1 = V1, A2 = V2)
结果:
# A tibble: 3 x 3
A1 A2 n
<fct> <fct> <int>
1 A A 1
2 A B 3
3 C D 4
答案 1 :(得分:0)
部分类似于h3rm4n解决方案,但只有R base:
mat <- as.data.frame(t(apply(df, MARGIN=1, sort)))
mat$freq <- 1
aggregate( freq ~ V1 + V2, data=mat, length)
V1 V2 freq
1 A A 1
2 A B 3
3 C D 4
apply(df, MARGIN=1, sort)
对每一行进行排序,然后转置生成的矩阵并将其转换为data.frame
agggregate()
按两列分组并获得每个组的lenght