检查数据框中的任何列在R中是否相同
我迭代地将模型拟合到许多不同的变量,在少数情况下,我用作自变量的两列包含一组相同的值。这会使模型无法识别并抛出错误。我想要一种方法来检查是否有任何列与dataframe中的任何其他列相同,然后返回有问题的列的名称。下面是一个数据帧示例检查数据框中的任何列在R中是否相同,r,R,我迭代地将模型拟合到许多不同的变量,在少数情况下,我用作自变量的两列包含一组相同的值。这会使模型无法识别并抛出错误。我想要一种方法来检查是否有任何列与dataframe中的任何其他列相同,然后返回有问题的列的名称。下面是一个数据帧示例 a <- rnorm(10) b <- rnorm(10) c <- a d <- rnorm(10) dat <- data.frame(a,b,c,d) a插入符号caret包包含您可能想要尝试的函数findLinearComb
a <- rnorm(10)
b <- rnorm(10)
c <- a
d <- rnorm(10)
dat <- data.frame(a,b,c,d)
a插入符号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
dat2您可以使用combn
获取所有列编号对,然后应用于生成的矩阵以检查所有元素是否相等
pairs <- t(combn(seq_len(ncol(dat)), 2))
same <- apply(pairs, 1, function(x) all(Reduce(`==`, dat[,x])))
pairs[same,]
# [1] 1 3
pairs您可以使用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
m=as.matrix(dist(t(dat)))
m[上三角(m,对角线=T)]=NA
哪个(m
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