基于plyr的计数频率
我试图使用R中库基于plyr的计数频率,r,count,combinations,frequency,R,Count,Combinations,Frequency,我试图使用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列,并合并所有这些数据帧。然后我对合并的数据帧进行“计数” combined1_2 = cbind(df$N1,d
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列,并合并所有这些数据帧。然后我对合并的数据帧进行“计数”
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)
所以当我检查频率表时,我得到了以下结果(只显示了部分结果)
问题是计数函数处理的数字“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
您只需数一数这些数字连成一行的时间:
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
如果没有太多的数字需要检查,也可以通过检查
df
是否等于每个数字来将其矢量化
sum((rowSums(df == 1) > 0) & (rowSums(df == 2) > 0))
## [1] 4
谢谢你的帮助。这确实简化了过程。另外一个问题:对于更大的数据,我想如果我想在例如40个不同的数字中找到组合频率,我将不得不使用循环。如果你有40个不同的数字,使用Caths方法,这将是简单的谢谢你的帮助。这确实简化了过程。另外一个问题:对于更大的数据,我想如果我想在40个不同的数字之间找到组合频率,我必须使用循环。如果你有40个不同的数字,使用Caths方法,这将是简单的解决方案!它省去了合并每个列的过程。我想知道是否有一种简单的方法可以写出1和40之间任意两个数字的所有组合。或者,使用循环是将c(1,2)部分替换为c(i,i+n)的唯一解决方案吗?@1STCLASSCLOME:-)。对于您的第二个问题,可以使用
combn
?谢谢您的解决方案!它省去了合并每个列的过程。我想知道是否有一种简单的方法可以写出1和40之间任意两个数字的所有组合。或者,使用循环是将c(1,2)部分替换为c(i,i+n)的唯一解决方案吗?@1STCLASSCLOME:-)。第二个问题可以使用combn
?