[R] 결측치 처리
- R
- 2024. 7. 30.
R 결측치 처리
데이터 분석에서 중요한 단계 중 하나인 데이터 정제 및 전처리에 대해 얘기해보려고 합니다. 데이터 정제는 원데이터를 분석하기 쉬운 데이터로 만드는 과정으로, 데이터의 품질을 높이고 분석 결과의 신뢰성을 보장합니다. 이 중 결측치 처리에 대해서 보겠습니다.
결측치 확인
먼저, 결측치를 확인하는 방법을 알아봅시다. is.na()
함수를 사용하면 데이터 프레임 내의 결측치를 확인할 수 있습니다. data를 만들어서 진행해보겠습니다.
data <- data.frame(
A = c(1, 2, NA, 4, 5),
B = c("a", NA, "c", "d", "e")
)
# 결측치 확인
is.na(data)
결측치 제거하기
1. 결측치가 포함된 행 전체 제거
na.omit()
함수를 이용하면 결측치가 포함된 행을 전체 제거합니다.
clean_data <- na.omit(data)
2. 결측치가 없는 행만 선택
complete.cases()
함수를 사용해 결측치가 없는 행만 선택할 수도 있습니다. na.omit()과 같은 방법입니다.
clean_data <- data[complete.cases(data), ]
3. 특정 열에서 결측치 제거
전체 데이터 프레임에서 결측치를 제거하는 대신, 특정 열에서만 결측치를 제거할 수도 있습니다. 예를 들어, 열 A에서 결측치를 제거하려면 다음과 같이 합니다.
data_clean_A <- data[!is.na(data$A), ]
B열의 결측치는 제거되지 않고 A열의 결측치만 제거된 것을 볼 수 있습니다.
4. 결측치가 많은 열 제거
결측치가 너무 많은 경우 아예 열을 제거하는 것이 더 나은 경우도 있습니다. dplyr
패키지의 select()
함수를 사용하여 결측치 지정된 비율보다 높은 열을 제거할 수 있습니다.
library('dplyr')
# 결측치 비율이 50% 이상인 열 제거
clean_data <- data %>%
select(where(~ sum(is.na(.)) / nrow(data) < 0.5))
하지만 만약 where 안에 조건에 해당하는 열이 하나도 없다면 오류가 발생합니다.
이를 방지하기 위해 조건에 해당하는 열이 하나도 없을때는 빈테이블을 반환하도록 합니다.
library('dplyr')
# 결측치 비율이 50% 이상인 열의 이름을 찾기
columns_to_keep <- sapply(data, function(col) sum(is.na(col)) / nrow(data) > 0.5)
# 열이 선택되지 않을 경우 빈 데이터 프레임 반환
if (all(!columns_to_keep)) {
clean_data <- data.frame()
} else {
clean_data <- data %>% select(names(columns_to_keep)[columns_to_keep])
}
print(clean_data)
해당 데이터에는 결측치가 50%이상 되는 경우가 없기 때문에 빈 데이터프레임이 나왔습니다.
결측치 대체하기
결측치를 제거하지 않고 다른 값으로 대체합니다. 예를 들어, 평균값이나 중앙값으로 대체하는 방법이 있습니다. 분야에 따라 필요한 값이나 일반적인 값을 넣어도 됩니다.
data$A[is.na(data$A)] <- mean(data$A, na.rm = TRUE)
data$B[is.na(data$B)] <- "missing"
열 A의 결측치를 평균값으로, 열 B의 결측치를 "missing"이라는 값으로 대체합니다.
마치며
데이터분석을 하면 마주할 수밖에 없는 결측치 처리에 대해 알아보았습니다. 분석할 데이터가 이쁘고 정갈하게 나에게 주어지는 게 아니기 때문에 언제나 결측치를 어떻게 할것인지 판단해야하고 그 판단이 정확할수록 모델 성능이 좋아집니다. 많은 경험이 뒷받침되어야겠죠? 참고가 되시길 바랍니다.
'R' 카테고리의 다른 글
[R] dplyr 패키지를 이용한 손쉬운 데이터 조작 (0) | 2024.08.01 |
---|---|
R 데이터 변환 정리글 (0) | 2024.07.31 |
[R] 데이터 타입 변경하기 (0) | 2024.07.29 |
R로 데이터 불러오기와 저장하기 (0) | 2024.07.26 |
R로 ROC 곡선 분석하기 (0) | 2024.07.25 |