如何比较R中数据集中的多个列?

时间:2019-05-22 11:19:17

标签: r

我的数据集是这样的..它的行和列比这多得多:

           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个不同的数据集,在这里我想比较单个数据集中的各个列。我是初学者。请给我建议。在此先感谢!

1 个答案:

答案 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可能会更快。