【问题标题】:Frequency of combined factors and their inverse组合因子的频率及其倒数
【发布时间】:2018-05-05 02:30:24
【问题描述】:

我想计算配对的频率。

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

    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

【问题讨论】:

  • 您能解释一下如何计算目标吗?目前尚不清楚这在您的样本集上下文中意味着什么

标签: r


【解决方案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

【讨论】:

  • @GastonCastillo 为什么不接受我的回答?有什么问题吗?
【解决方案2】:

部分类似于 h3rm4n 解决方案,但只有 R 基础:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 2022-01-10
    相关资源
    最近更新 更多