使用二进制数据获取r中不同组合的频率
我有一个包含二进制数据的表,如下所示:使用二进制数据获取r中不同组合的频率,r,count,combinations,R,Count,Combinations,我有一个包含二进制数据的表,如下所示: middle-circle triangles-inside straight-rays split-rays triangle-rays grouped-rays sep-lines 1 0 0 0 1 0 1 0
middle-circle triangles-inside straight-rays split-rays triangle-rays grouped-rays sep-lines
1 0 0 0 1 0 1
0 1 0 1 0 0 0
0 0 0 0 0 0 0
0 1 0 1 0 0 0
0 1 0 1 0 0 0
0 0 0 0 0 0 0
0 0 1 0 0 0 0
count
[1,] "grouped_rays" "middle_circle" "sep-lines "2"
[2,] "grouped_rays" "separation_lines" "triangles inside" "0"
[3,] "grouped_rays" "split _rays" "1"
我想知道不同的组合发生的频率。
我在stackoverflow上读到了同样的问题,我将以下代码应用于我的数据:
library(gtools)
# get all vars present in each row
present <- lapply(seq(nrow(det)), function(i) names(which(det[i,] == 1)))
# get all pairs
all.pairs <- gtools::combinations(n = ncol(det), r = 2, colnames(det))
# count times pairs appear
count <- apply(all.pairs, 1, function(x){
there <- lapply(x, function(y) sapply(present, `%in%`, x = y))
sum(Reduce(`&`, there))
})
cbind(all.pairs, count)
我的问题是:是否有可能不仅得到成对的组合,而且得到所有的组合?
为什么总是说“计数0”?
我试图得到一个类似上面的列表,列出所有可能的组合以及它们出现的频率。
应该是这样的:
middle-circle triangles-inside straight-rays split-rays triangle-rays grouped-rays sep-lines
1 0 0 0 1 0 1
0 1 0 1 0 0 0
0 0 0 0 0 0 0
0 1 0 1 0 0 0
0 1 0 1 0 0 0
0 0 0 0 0 0 0
0 0 1 0 0 0 0
count
[1,] "grouped_rays" "middle_circle" "sep-lines "2"
[2,] "grouped_rays" "separation_lines" "triangles inside" "0"
[3,] "grouped_rays" "split _rays" "1"
当然,还有所有其他可能的组合。这只是一个例子。这可能会给出期望的结果吗
tt <- do.call(rbind, apply(x==1, 1, function(y) {
z <- names(y[y])
if(length(z) > 1) t(combn(z, 2))}))
table(apply(tt, 1, function(y) paste(sort(y), collapse = " ")))
# middle.circle sep.lines middle.circle triangle.rays
# 1 1
# sep.lines triangle.rays split.rays triangles.inside
# 1 3
tt您期望的最终输出是什么?我想知道数据帧中发生不同组合的频率。您应该定义您期望在最后得到什么类型的对象。您能否显示此特定情况下的确切输出?您可以编辑您的问题。谢谢您的回复!不幸的是,我在尝试代码时遇到以下错误:dim(X)必须具有正长度