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

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

이 튜토리얼에서는 dplyr 라이브러리를 사용하여 누락된 값을 처리하는 방법을 알아봅니다. dplyr 라이브러리는 ecos데이터 분석을 실현하는 시스템입니다.

R에서 누락된 값 바꾸기

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

돌연변이()

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

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

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

동사 mutate()는 사용하기 매우 쉽습니다. 새로운 변수 follo를 만들 수 있습니다wing 이 구문은:

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를 삭제하는 것은 쉽지만 이것이 가장 우아한 솔루션이라는 의미는 아닙니다. 분석하는 동안에는 wise 결측값을 처리하기 위해 다양한 방법을 사용하는 것

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

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

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

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)))

요약

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

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

더 폴로wing 테이블 합계mari누락된 관측값을 모두 제거하는 방법

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

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

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