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