일부 큰 데이터가 있는데 부분적으로 매우 비슷한 변수로 구성되어 있습니다. 일부 변수는 값이 없거나 (예 : 아래 예에서는 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)
x1, x3 및 x4는 매우 유사합니다. x2와 x5도 매우 유사합니다. 내 함수는 80 % 이상의 경우에 같은 값을 가진 모든 쌍을 포함하는 목록을 인쇄해야합니다. 내가 X1, X3 및 X4의 유사성을 식별하기 위해 관리
# My attempt to write such a function
fun_clean <- function(data, similarity) {
output <- list()
data <- data[complete.cases(data), ]
for(i in 1:ncol(data)) {
if(i < ncol(data)) {
for(j in (i + 1):ncol(data)) {
similarity_ij <- sum(data[ , i] == data[ , j])/nrow(data)
if(similarity_ij >= similarity) {
output[[length(output) + 1]] <- colnames(data)[c(i, j)]
}
}
}
}
output
}
fun_clean(data = df, similarity = 0.8)
: 여기에 지금까지 무엇을 가지고 있습니다. x2와 x5의 유사성 (즉, 라벨이 다른 유사한 변수)은 본인의 기능에 의해 발견되지 않습니다. 또한, 제 기능이 매우 느립니다.
질문 : : 어떻게 계산 효율적인 방법으로 모든 유사한 변수를 식별 할 수 따라서, 나는 다음과 같은 질문을?
고마워요, 정확히 내가 찾고 있었던 것입니다. – JSP