R, 결측치 처리 (Missing value, NA) Start.

BioinformaticsAndMe



#R 작업시 발생하는 결측치 (missing value)를 다뤄보자.


-R 프로그래밍에서 결측지(missing value)는 NA (Not Available) 라는 문자로 처리해야 한다. NaN (Not a Number)는 분모를 0으로 나누는 것과 같이 계산이 불가능 할 경우 출력되는 문자다.

> y <- c(1,2,3, NA)

> y

[1]  1  2  3 NA


#is.na()는 벡터의 결측지가 존재할 경우 true

> is.na(y)

[1] FALSE FALSE FALSE  TRUE


> summary(y)

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
    1.0       1.5       2.0       2.0       2.5       3.0         1 

#NA는 missing value를 표현하는 논리형 자료이지만, "NA"는 문자열 그 자체이다.
> is.na( NA )
[1] TRUE
> is.na( "NA" )
[1] FALSE


#특정 값을 NA로 바꾸기 (-999 -> NA )

> ages <- c(48, 78, 56, 88, -999, 13, 26, -999)

> ages[ ages == -999] <- NA

> ages

[1] 48 78 56 88 NA 13 26 NA


#결측지(missing value)가 하나라도 포함된 데이터가 존재할 경우 연산의 결과 역시 NA가 된다. 따라서 함수 역시 아래와 같이 NA가 결과로 나온다.

> sum(ages)

[1] NA

> mean(ages)

[1] NA


#NA 데이터를 제외하고 연산하고 싶을 경우  na.rm = TRUE 매개변수를 넣어주면 된다.

> sum(ages, na.rm = TRUE)

[1] 309

> mean(ages, na.rm=TRUE)

[1] 51.5




#결측치 (missing value) 실습 예제


> weight <- c(65.4, 55, 380, 72.2, 51, NA)

> height <- c(170, 155, NA, 173, 161, 166)

> gender <- c("M", "F","M","M","F","F")

> testDate <- c("2013/09/01", "2013/09/01", "2013/09/05", "2013/09/14", "2013/10/11", "2013/10/26")

> patients <- data.frame( weight = weight, height=height, gender=gender, testDate=testDate)


> patients
  weight height gender   testDate
1   65.4    170      M 2013/09/01
2   55.0    155      F 2013/09/01
3  380.0    NA      M 2013/09/05
4   72.2    173      M 2013/09/14
5   51.0    161      F 2013/10/11
6    NA    166      F 2013/10/26

> str(patients)
'data.frame':   6 obs. of  4 variables:
 $ weight  : num  65.4 55 380 72.2 51 NA
 $ height  : num  170 155 NA 173 161 166
 $ gender  : Factor w/ 2 levels "F","M": 2 1 2 2 1 1
 $ testDate: Factor w/ 5 levels "2013/09/01","2013/09/05",..: 1 1 2 3 4 5

#몸무게 측정을 거부한 환자 (6), 키 측정을 거부한 환자 (3)를 제외한 환자들 목록을 부르기
> na.omit(patients) # 해당 row 데이터를 삭제한 후 출력하는 방법
  weight height gender   testDate
1   65.4    170      M 2013/09/01
2   55.0    155      F 2013/09/01
4   72.2    173      M 2013/09/14
5   51.0    161      F 2013/10/11

# complete.cases(patients) # NA가 존재하는 경우 FALSE를 리턴

[1]  TRUE  TRUE FALSE  TRUE  TRUE FALSE


#patients[complete.cases(patients),] # complete.cases 함수 리턴값이 참인 경우를 출력하는 방법

  weight height gender   testDate

1   65.4    170      M 2013/09/01

2   55.0    155      F 2013/09/01

4   72.2    173      M 2013/09/14

5   51.0    161      F 2013/10/11


#patients 데이터에서 weight, height만 가져오기
> patients.sub <- patients[ ,c("weight","height")]
> patients.sub
  weight height
1   65.4    170
2   55.0    155
3  380.0     NA
4   72.2    173
5   51.0    161
6     NA    166

#patients.sub 데이터 연산하기
> apply(patients.sub, 2, mean) # patients.sub 데이터에 2: 열단위, mean 함수 적용
weight height 
    NA     NA 

#NA 데이터 삭제한 후 연산하기
> apply(patients.sub, 2, mean, na.rm=TRUE)
weight height 
124.72 165.00 




R, 결측치 처리 (Missing value, NA) End.

BioinformaticsAndMe

'R' 카테고리의 다른 글

R 상관분석 (R correlation test)  (0) 2018.08.10
막대그래프 (Barplot)  (0) 2018.08.06
R, Command line interface Ⅱ  (0) 2018.07.20
R, Command line interface Ⅰ  (0) 2018.07.16
R, RStudio 설치  (0) 2018.07.14

+ Recent posts