使用 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
我正在尝试使用 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