组合因子的频率及其逆

时间:2018-05-04 16:10:53

标签: r

我想计算对的频率。

数据框有两列多个因子变量,如下所示:

    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

2 个答案:

答案 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