R에서 누락된 값(NA)을 바꾸는 방법: na.omit & na.rm

데이터 과학에서 누락된 값은 데이터 프레임의 열에 관측치가 누락되거나 숫자 값 대신 문자 값이 포함된 경우에 발생합니다. 데이터에서 올바른 결론을 도출하려면 누락된 값을 삭제하거나 대체해야 합니다.

이 튜토리얼에서는 dplyr 라이브러리를 사용하여 누락된 값을 처리하는 방법을 알아봅니다. dplyr 라이브러리는 데이터 분석을 실현하는 생태계의 일부입니다.

R에서 누락된 값 바꾸기

이 자습서에서는 다음을 배우게 됩니다.

돌연변이()

네번째 동사는 dplyr 라이브러리 새 변수를 생성하거나 기존 변수의 값을 변경하는 데 도움이 됩니다.

우리는 두 부분으로 진행할 것입니다. 우리는 다음 방법을 배울 것입니다:

  • 데이터 프레임에서 누락된 값 제외
  • 누락된 값을 평균 및 중앙값으로 대치

동사 mutate()는 사용하기 매우 쉽습니다. 다음 구문에 따라 새 변수를 만들 수 있습니다.

mutate(df, name_variable_1 = condition, ...)
arguments:
-df: Data frame used to create a new variable
-name_variable_1: Name and the formula to create the new variable
-...: No limit constraint. Possibility to create more than one variable inside mutate()

누락된 값 제외(NA)

dplyr 라이브러리의 na.omit() 메서드는 누락된 관측치를 제외하는 간단한 방법입니다. 데이터에서 모든 NA를 삭제하는 것은 쉽지만 가장 우아한 솔루션이라는 의미는 아닙니다. 분석하는 동안 누락된 값을 처리하기 위해 다양한 방법을 사용하는 것이 현명합니다.

누락된 관측값 문제를 해결하기 위해 타이타닉 데이터 세트를 사용합니다. 이 데이터세트에서 우리는 참사 당시 탑승한 승객의 정보에 접근할 수 있습니다. 이 데이터 세트에는 처리해야 할 NA가 많습니다.

인터넷에서 csv 파일을 업로드한 다음 어떤 열에 NA가 있는지 확인합니다. 데이터가 누락된 열을 반환하려면 다음 코드를 사용할 수 있습니다.

데이터를 업로드하고 누락된 데이터를 확인해 보겠습니다.

PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/test.csv"
df_titanic <- read.csv(PATH, sep = ",")
# Return the column names containing missing observations
list_na <- colnames(df_titanic)[ apply(df_titanic, 2, anyNA) ]
list_na

출력:

## [1] "age"  "fare"

여기

colnames(df_titanic)[apply(df_titanic, 2, anyNA)]

데이터가 없는 컬럼의 이름을 부여합니다.

age 및 fee 열에 누락된 값이 있습니다.

na.omit()를 사용하여 삭제할 수 있습니다.

library(dplyr)
# Exclude the missing observations
df_titanic_drop <-df_titanic %>%
na.omit()		
dim(df_titanic_drop)

출력:

## [1] 1045   13

새 데이터세트에는 원래 데이터세트의 1045개 행과 비교하여 1309개 행이 포함되어 있습니다.

누락된 값 제외

평균과 중앙값을 사용하여 누락된 데이터 대치

누락된 값을 중앙값이나 평균으로 대치(채울)할 수도 있습니다. 좋은 방법은 평균과 중앙값에 대해 두 개의 별도 변수를 만드는 것입니다. 일단 생성되면 누락된 값을 새로 형성된 변수로 바꿀 수 있습니다.

NA가 포함된 열의 평균을 계산하기 위해 Apply 메서드를 사용하겠습니다. 예를 보자

단계 1) 자습서 앞부분에서는 list_na라는 목록에 누락된 값이 포함된 열 이름을 저장했습니다. 우리는 이 목록을 사용할 것입니다

단계 2) 이제 na.rm = TRUE 인수를 사용하여 평균을 계산해야 합니다. 열에 누락된 데이터가 있으므로 이 인수는 필수이며 이는 R이 해당 열을 무시하도록 지시합니다.

# Create mean
average_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],
      2,
      mean,
      na.rm =  TRUE)
average_missing

코드 설명 :

Apply 메소드에 4개의 인수를 전달합니다.

  • df: df_titanic[,colnames(df_titanic) %in% list_na]. 이 코드는 list_na 객체의 열 이름(예: "age" 및 "fare")을 반환합니다.
  • 2: 열에 대한 함수 계산
  • 평균: 평균을 계산합니다.
  • na.rm = TRUE: 누락된 값을 무시합니다.

출력:

##      age     fare 
## 29.88113 33.29548

누락된 관측값이 포함된 열의 평균을 성공적으로 생성했습니다. 이 두 값은 누락된 관측치를 대체하는 데 사용됩니다.

단계 3) NA 값 바꾸기

dplyr 라이브러리의 동사 mutate는 새 변수를 생성하는 데 유용합니다. NA 없이 새 변수를 만들 수 있도록 원래 열을 반드시 변경할 필요는 없습니다. mutate는 사용하기 쉽습니다. 변수 이름을 선택하고 이 변수를 생성하는 방법을 정의하기만 하면 됩니다. 전체 코드는 다음과 같습니다.

# Create a new variable with the mean and median
df_titanic_replace <- df_titanic %>%
   mutate(replace_mean_age  = ifelse(is.na(age), average_missing[1], age),
   replace_mean_fare = ifelse(is.na(fare), average_missing[2], fare))

코드 설명 :

다음과 같이 두 개의 변수, replacement_mean_age 및 replacement_mean_fare를 생성합니다.

  • 대체_평균_나이 = ifelse(is.na(나이), 평균_누락[1], 나이)
  • replacement_mean_fare = ifelse(is.na(fare),average_missing[2],fare)

열 연령에 누락된 값이 있으면average_missing(연령 평균)의 첫 번째 요소로 바꾸고, 그렇지 않으면 원래 값을 유지합니다. 요금에 대한 동일한 논리

sum(is.na(df_titanic_replace$age))

출력:

## [1] 263

교체 수행

sum(is.na(df_titanic_replace$replace_mean_age))

출력:

## [1] 0

원래 열 age에는 263개의 누락된 값이 있지만 새로 생성된 변수는 이를 변수 age의 평균으로 대체했습니다.

단계 4) 누락된 관측값을 중앙값으로 대체할 수도 있습니다.

median_missing <- apply(df_titanic[,colnames(df_titanic) %in% list_na],
      2,
      median,
      na.rm =  TRUE)
df_titanic_replace <- df_titanic %>%
            mutate(replace_median_age  = ifelse(is.na(age), median_missing[1], age), 
            replace_median_fare = ifelse(is.na(fare), median_missing[2], fare))
head(df_titanic_replace)

출력:

평균과 중앙값을 사용하여 누락된 데이터 대치

단계 5) 빅 데이터 세트에는 누락된 값이 많을 수 있으며 위의 방법은 번거로울 수 있습니다. sapply() 메소드를 사용하면 위의 모든 단계를 한 줄의 코드로 실행할 수 있습니다. 우리는 평균과 중앙값의 가치를 알지 못할 것입니다.

sapply는 데이터 프레임, 그래서 우리는 데이터 프레임 객체를 생성하기 위해 data.frame() 내에 sapply() 함수를 래핑할 수 있습니다.

# Quick code to replace missing values with the mean
df_titanic_impute_mean < -data.frame(
    sapply(
        df_titanic,
        function(x) ifelse(is.na(x),
            mean(x, na.rm = TRUE),
            x)))

요약

누락된 값을 처리하는 세 가지 방법이 있습니다.

  • 누락된 관측치를 모두 제외
  • 평균으로 대치하다
  • 중앙값으로 대치

다음 표는 누락된 모든 관찰을 제거하는 방법을 요약한 것입니다.

도서관 목표 암호
기지 누락된 관측치 나열
colnames(df)[apply(df, 2, anyNA)]
dplyr 누락된 값을 모두 제거하세요.
na.omit(df)

평균 또는 중앙값을 사용한 대치는 두 가지 방법으로 수행할 수 있습니다.

  • 적용 사용
  • sapply 사용
방법 세부 정보 장점 단점
적용을 통해 단계별로 누락된 열을 확인하고, 평균/중앙값을 계산하고, 값을 저장하고, mutate()로 대체합니다. 당신은 평균/중앙값의 가치를 알고 있습니다 더 많은 실행 시간. 큰 데이터 세트로 인해 속도가 느려질 수 있음
Sapply를 사용한 빠른 방법 sapply() 및 data.frame()을 사용하여 누락된 값을 자동으로 검색하고 평균/중앙값으로 대체 코드가 짧고 빠릅니다. 대체 값을 모릅니다.