본문 바로가기

배우기/복습노트[R과 분석]

[복습] R(programming language) NA와 NULL

728x90
반응형

https://metime.tistory.com/107

 

[R] NA와 NULL의 차이

--------------------------------------- | | | | | | --------------------------------------- | | | | NULL | | --------------------------------------- 다음과 같은 자료 구조가 있다고 하자 여기서 한 자리에 NULL이 발생하였다 그러

metime.tistory.com

 

이 글에서 NA과 NULL의 차이를 작성한 적이 있다.

이번 게시글에서는 NA와 NULL을 다시 한번 알아보고 이 값들을 처리하는 방법에 대하여 작성하려고 한다.

 

1. NULL: zero length space를 의미하므로 벡터의 원소를 NULL로 수정할 수 없지만 객체 자체 삭제시 NULL로 삭제가 가능하다(애초에 없는 대상이 됨).

 

즉 아래와 같이는 불가능하다.

 

그러나 다음과 같이는 가능하다.

 

 

2. NA: 자리를 차지하는(zero length 아님) 대상을 표현하는 방법(결측치: 아직 정해지지 않았거나, 입력되지 않았거나 알 수 없거나 잘못 들어온 값)으로, length를 차지하고 있기 때문에 수정이 가능하다.

위처럼 객체의 일부를 NA로 수정이 가능하나 NA의 산술 연산 결과는 NA로 리턴된다. 그러므로 산술연산 전에 NA를 대치하여야 한다.

 

728x90

 

 

NA를 대치하는 방법은 두 가지가 있다.

 

1) 결측치로 표현

read.csv 파일에 - 라는 결측치가 있다. 

이 값을 NA로 치환하여 결측치로 표현하였다.

그러나 Line 4처럼 replace로는 NA를 넣을 수 없다. 왜냐하면 replace의 치환 대상 또한 문자여야하기 때문이다.

 

 

2) NA를 다른 값으로 치환

 2-1) 방법 1. str_replace_na

먼저 문법은 다음과 같다

str_replace_na(string = ,                    # 문자열

                         replacement = 'NA')  # NA치환값(문자값만 가능)

 

위와 같이 사용할 수 있으며 NA값을 '0'으로 치환하는 순간 같은 V3 컬럼은 모두 문자가 된다. 

이는 as.numeric을 씌워서 해결하여야 한다.

 

 

 2-2) 방법 2. 직접 치환

is.na() 함수가 있다.

참고로 is로 시작하면 형 확인 함수, as로 시작하면 형 치환 함수이다.

 

이런 식으로 사용이 가능하다.

 

 

 2-3) 방법 3. ifelse

이런 방식으로도 NA를 직접치환 할 수 있다.

 

수학/통계 함수인 sum, mean, max, min 등은 기본적으로 NA가 포함되어 있으면 NA로 리턴된다.

이 함수 중 옵션 중 하나인 na.rm=T(F가 Default)로 설정하면 NA를 무시하고 연산한다.

 

하지만 v1 + 100 이런 계산은 수행할 수 없다. 이 때에는 NA를 치환하여야 한다.

728x90
반응형