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) 와 같음
cor(s_98,use="complete.obs") # NA 관측치 ㅣ전부 제거 후
cor(s_98,use="pairwise.complete.obs") # pairwise
'R & SAS 300제 > 1. 설문지작성&전처리(S2)' 카테고리의 다른 글
제1강(R) 1.2 전처리 실습 (0) | 2020.10.05 |
---|---|
제1강(s) 1.1 왜 전처리가 필요한가. 통계분석 시작...(계속 수정) (0) | 2020.10.05 |
1.2 (g) 설문지 작성과 통계적 자료처리 (0) | 2020.09.13 |
1.3(g) 설문지 분석 결과 해석할 때 주의할 점 (0) | 2020.07.20 |