使用 plyr 计算频率

Counting frequency using plyr

我正在尝试使用 R 中 plyr 库中的 count 函数来计算出现的特定数字组合的频率。

例如,我想知道 1 号和 2 号一起出现的确切频率。

   N1 N2 N3 
1   1  2  5
2   2  1  4    
3   2  4  3
4   3  1  2    
5   2  3  1
6   3  1  4

所以对于像上面这样的数据框,我必须合并第 1 列和第 2 列、第 1 列和第 3 列、第 2 列和第 3 列,并将它们全部合并。然后我为合并的数据框做 "count"。

combined1_2 = cbind(df$N1,df$N2)
combined1_3 = cbind(df$N1,df$N3)
combined2_3 = cbind(df$N2,df$N3)

combined_all = rbind(freq1_2,freq1_3,freq2_3)
combined_freq = count(combined_all)

所以当我检查频率 table 时,我得到了以下结果(只显示了部分结果)。

  x1 x2  Freq
1  1  2     2
2  2  1     2   

问题是计数函数处理的数字“1 和 2”不同于“2 和 1”。所以我想知道 R 中是否有任何函数可以解决这个问题并产生如下所示的正确结果。

  x1 x2  Freq
1  1  2     4

你可以只计算数字连续出现的次数:

sum(apply(df, 1, function(x){all(c(1, 2) %in% x)}))
#[1] 4

如果没有太多要检查的数字,您也可以对其进行矢量化,只需检查 df 是否等于每个数字

sum((rowSums(df == 1) > 0) & (rowSums(df == 2) > 0))
## [1] 4