我的数据集是这样的..它的行和列比这多得多:
x1 x2 x3 x4
part 1 1 1 1 1
part 2 0 1 1 0
part 3 0 0 0 1
part 4 1 0 1 1
part 5 1 1 1 1
我想比较各种组合中的列(x1 x2,x1 x3,x1 x4,x1 x2 x3,x1 x2 x4,x1 x3 x4,x2 x3 x4,x1 x2 x3 x4)以找到最大零件数常见的。
我可以使用combn获取列的各种组合,但是我不知道如何比较各种列。 all.equal需要2个不同的数据集,在这里我想比较单个数据集中的各个列。我是初学者。请给我建议。在此先感谢!
答案 0 :(得分:0)
一种方法可能是使用outer
。在这里,定义了一个辅助函数comp_cols
,该函数采用两个列名向量,并计算dat
的对应列是否相等。
# slightly modified data.frame from question
dat <- data.frame(x1=c(1,0,0,1,1), x2=c(1,1,0,0,1), x3=c(1,1,0,1,1), x4=c(1,0,0,1,1))
# compare function
comp_cols <- function(x,y) {
ans <- rep(NA, length(x))
for (i in seq_along(x)) ans[i] <- all(dat[,x[i]]==dat[,y[i]])
return(ans)
}
# compare each combination
res <- outer(colnames(dat), colnames(dat), FUN=comp_cols)
rownames(res) <- colnames(dat)
colnames(res) <- colnames(dat)
这可能不是最有效的解决方案,因为结果矩阵是对称的,因此只需要一半的计算。如果计算时间成为问题,则使用combn
可能会更快。