R 数据清理:查找非常相似变量的函数

R 数据清理:查找非常相似变量的函数,r,function,bigdata,similarity,data-cleaning,R,Function,Bigdata,Similarity,Data Cleaning,我有一些大数据,其中部分由非常相似的变量组成。有些变量缺少值(例如,下例中的x3和x5),有些变量类似,但标签不同(例如x2和x5)。为了清理数据,我想识别并最终删除这些类似的变量。我试图编写一个函数,返回所有相似变量对的列名。以下是一些示例数据: # Example data set.seed(222) N <- 100 x1 <- round(rnorm(N, 0, 10)) x2 <- round(rnorm(N, 10, 20)) x3 <- x1 x3[sa

我有一些大数据,其中部分由非常相似的变量组成。有些变量缺少值(例如,下例中的x3和x5),有些变量类似,但标签不同(例如x2和x5)。为了清理数据,我想识别并最终删除这些类似的变量。我试图编写一个函数,返回所有相似变量对的列名。以下是一些示例数据:

# Example data

set.seed(222)

N <- 100
x1 <- round(rnorm(N, 0, 10))
x2 <- round(rnorm(N, 10, 20))
x3 <- x1
x3[sample(1:N, 7)] <- NA
x4 <- x1
x4[sample(1:N, 5)] <- round(rnorm(5, 0, 10))
x5 <- x2
x5 <- paste("A", x5, sep = "")
x5[sample(1:N, 15)] <- NA

df <- data.frame(x1, x2, x3, x4, x5)

df$x1 <- as.character(df$x1)
df$x2 <- as.character(df$x2)
df$x3 <- as.character(df$x3)
df$x4 <- as.character(df$x4)
df$x5 <- as.character(df$x5)

head(df)
#示例数据
种子集(222)

N在插入符号包中,有一个功能可以发现相关变量以及其他变量的线性组合:


为了比较列,首先需要数值。您可以使用
gsub()
仅提取数值,然后转换为数值。完成此转换后,您就可以开始了:

df <- apply(df, 2, function(x) as.numeric( gsub("[^0-9]", "", x) ))
因此,在80%以上的情况下,
1和3
1和4
2和5
以及
3和4
列彼此相等


注意:如果一个或两个比较值的
NA
,这将被视为不匹配

非常感谢你的回答。由于缺少值,
findCorrelation
函数给了我一些错误。我可以想象在插入符号中有一个解决方法,但是由于Ken S.的解决方案对我有效,我接受了他的回答。当你调用“cor”函数时,你必须添加参数:na.rm=trueThank,这正是我想要的。
df <- apply(df, 2, function(x) as.numeric( gsub("[^0-9]", "", x) ))
combs <- combn(ncol(df), 2)

res <- apply(combs, 2, function(x){
  sum(df[, x[1]] == df[, x[2]], na.rm = TRUE)/nrow(df)
})

thresh <- 0.8
combs[, res > thresh]
#      [,1] [,2] [,3] [,4]
# [1,]    1    1    2    3
# [2,]    3    4    5    4