728x90

1. NA Not Available

NA는 그냥 미싱, 결측값으로 생각하면 됩니다.

NA와 혼동되는 NULL은 그냥 (아예) "값이 없다"를 의미합니다.

둘 다 헷갈리겠지만 NULL 은 당분간 생각 안 하시는 게 좋습니다.

"값이란 게 없는데... 무슨 생각을 해..." 하는 식으로 ^^^

 

(1)  mean(c(1,2,3,4,5)) -> 3

x <- c(1,2,3,4,5) 는 평소 잘 아는 (완벽한) 벡터입니다.

mean(x) 하면 당연히 평균값이 3이 됩니다.

 

(2) mean(c(1,2,NA,4,5)) -> NA

x <- c(1,2,NA,4,5) 는 3번째 요소에 알수없는 미싱(또는 NA)이 들어가 있습니다.

mean(x) 하면 당연히 값을 구할 수 없습니다. 결과 또한 NA가 됩니다.

NA는 알 수 없는 값이긴 하지만 자리를 1 자리 차지하고 있습니다.

벡터의 길이를 확인하는 length를 사용하면 5가 됩니다.

length(c(1,2,NA,4,5))  --> 5

 

(3)mean(c(1,2,NA,4,5),na.rm=T) -> 3

x <- c(1,2,NA,4,5) 5개의 요소 중 3번째 요소에 알 수 없는 미싱(또는 NA)이 들어가 있습니다.

NA가 들어가 있어서 평균값을 구할 수 없습니다. na.rm=T 를 사용하면 NA를 제외한 요소들의 평균을

구할 수 있습니다.

mean(x,na.rm=T) 즉 NA를 rm(Remove) 제거하고 평균을 구할 수 있습니다.

 

(4) mean(c(1,2,NULL,4,5)) -> 3

NULL 은 아예 값도 없고, 존재도 없습니다.

그리하여 NULL 을 포함하여 요소가 5개 이지만, 실제로는 요소가 4개인 것입니다.

 

length(c(1,2,NULL,4,5))  --> 4   
4개의 요소로 구성되어 있습니다. 5개의 요소 중 3번째 요소(NULL)는 "아예 값이 없다"

벡터의 길이를 확인하는 length를 사용하면 4가 됩니다.

 

2. is.na, sum(is.na)

주어진 데이터에서 NA 가 있는 데이터를 확인하거나, 제외하고자 하는 경우가 있습니다.

이 때에는 is.na 로 확인을 합니다.

 

is.na : NA 이면 TRUE 반환

x <- c(1,2,NA,4,5) 

is.na(x)

[1] FALSE FALSE TRUE FALSE FALSE FALSE

 

sum(is.na) 는 NA의 갯수를 반환

> sum(is.na(c(1,2,NA,NA,4,5)))

[1] 2

3. Inf(Infinite), NaN(Not a Number)

Inf는 Infinite 로 무한대인 숫자를 나타내고 -Inf 는 - 무한대인 숫자를 나타냅니다.

실제로는 숫자가 있고 그 값이 무한대인 것입니다.

 

NaN은 Not a Number 로 그냥 숫자가 아니다...라는 의미로 생각하면 됩니다.

0을 0으로 나누면 어떻게 될까요? 무한대도 아니고 그렇다고 0도 아니고

그냥 모르겠다. 숫자는 아닌 것 같고... 그래서 Not a Number 입니다.

 

(1)  1/0 -> Inf,  -1/0 -> -Inf   0/0 -> NaN

 

4. NA가 있는 경우, sum( ) 합계 구하기

setwd("d:/r_class")

s_99 <- read.csv("tongcon_99.csv",header=T)

summary(s_99) 

#  데이터셋에 들어 있는 각 변수들의 기술통계랑을 구해 보면 age, edu, career, s_work 에 NA가 있는 것을 확인

#  그 중에서 NA가 있는 변수 edu에 대하여 합계를 내 보면

sum(s_99$edu)            # 변수 edu에 하나 이상 NA가 있으므로 합계 sum는  NA

sum(s_99$edu,na.rm=T) # na.rm=T 를 사용하여 NA를 무시하니까 합계가  107

dim(s_99)                   # 데이터셋 s-99 는 40개의 관측치와 13개의 변수로 구성  [1] 40 13

 

5. NA가 있는 관측치를 제외하는 na.omit( ) 함수

#=== (8) na.omit ----

#---- 변수 na.omit

edu_01 <- na.omit(s_99$age)    # 변수 age 에 na.omit 를 실행하여 NA 를 제거

length(edu_01)                      #  변수 age에 NA가 1개 제거되어 관측치가 40 -> 39

 

#--- 데이터셋 na.omit

s_98 <- na.omit(s_99)    # 데이터셋에 na.omit 를 적용하면 NA가 들어 있는 관측치 전부 제거

dim(s_98)                    # 관측치 40 -> 34   [1] 34 13   

 

6. NA가 있는 경우 상관계수 구하기 - cor( ) 함수

상관계수를 구하는 경우, 변수에 NA가 있는 경우, 그냥 상관계수를 구하면 

NA가 있는 변수는 모두 제외하고 상관계수를 구하게 됩니다.

 

여기서

NA가 있는 관측치를 전부 미리 제외하고 상관계수를 구하는 방법 use="complete.obs"

NA가 있는 관측치를 전부 미리 제외하지 않고, 해당 변수 각각 상관계수를 구할 때 제외하는 방법

use="pairwise.complete.obs" 를 사용하면 됩니다.

 

setwd("d:/r_class")

s_99 <- read.csv("tongcon_99.csv",header=T)

s_99

s_98 <- s_99[,c("age","s_work","s_pay","wage")]  # 연속변수만 추출

cor(s_98) # 전부 NA가 아닌 변수만  # s_pay와 wage 만 NA가 없음

cor(s_98,use="everything") # cor(s_98) 와 같음

NA가 없는 s_pay와 wage 만 상관계수가 있음

 

cor(s_98,use="complete.obs") # NA 관측치 ㅣ전부 제거 후

하나라도 NA가 있는 관측치는 미 전부 제외히고 상관계수 구함

 

cor(s_98,use="pairwise.complete.obs") # pairwise

NA 있는 관측치를 미리 전부 제외하는 것이 아니고, 해당 변수만 제외 고려

 

+ Recent posts