检查数据框中的任何列在R中是否相同

时间:2018-12-19 19:12:34

标签: r

我正在迭代地使模型适合许多不同的变量,在极少数情况下,我用作自变量的两列包含一组相同的值。这使模型无法识别并引发错误。我想要一种方法来检查数据框中是否有任何其他列与其他任何列相同,然后返回有问题的列的名称。这是一个示例数据框。

a <- rnorm(10)
b <- rnorm(10)
c <- a
d <- rnorm(10)
dat <- data.frame(a,b,c,d)

人们回答了如何测试数据帧中的两个独立列是否相同here。但是,我希望有一种方法可以将每列与其他每一列进行对照。

3 个答案:

答案 0 :(得分:4)

caret软件包包含您可能想尝试的功能findLinearCombos

caret::findLinearCombos(dat)
#$linearCombos
#$linearCombos[[1]]
#[1] 3 1


#$remove
#[1] 3

但是请注意,该函数还建议删除a乘以1的列

第二个例子

dat2 <- data.frame(a,b,c,d, e = -a) 
caret::findLinearCombos(dat2)
#$linearCombos
#$linearCombos[[1]]
#[1] 3 1

#$linearCombos[[2]]
#[1] 5 1


#$remove
#[1] 3 5

答案 1 :(得分:3)

您可以使用>>> df.shape() (10000, 10) 获取所有对的列号,然后将其应用于结果矩阵以检查所有元素是否相等。

.count()

或检查相关性(还将包括线性组合)

combn

答案 2 :(得分:1)

您可以使用dist函数计算列之间的距离矩阵,并找到距离为0的列的组合。

m = as.matrix(dist(t(dat)))
m[upper.tri(m,diag=T)] = NA
which(m<1.5e-8,arr.ind=T)

  row col
c   3   1

请注意,此解决方案仅适用于数字列。如果数据框中有定性变量,则将无法对其进行比较。