v1이 다음과 같이 정의되었을 때 (v1 <- c(1, NA, 2, NA, 3, NA)) , v1의 NA를 이전 값으로 가져와서 채우려고 한다.
그럴 때에는 아래와 같이 풀이할 수 있다.
그런데 문제는 NA가 첫 번째 원소로 들어갈 경우이다(v2처럼). 이럴 때에도 적용할 수 있는 코드는 다음과 같다.
위의 빨간 동그라미 부분이 바뀌었는데 이렇게 max 함수를 쓴 이유는, v2[i-1]로 이전값을 가져오는 경우 i가 1이면 v2[0]이 되어 없는 위치의 값을 가져오려 한다. 이 때 R에서는 무시되나 파이썬에서는 에러가 발생한다. 따라서 위치값이 절대 1 밑으로 내려가지 않도록 i-1과 1중 최대값을 선택하여 전달하는 로직이다.
이렇게 위와 같이 코드로 짤 수 있지만 zoo 패키지의 na.locf 함수를 사용할 수도 있다.
문법은 아래와 같다.
zoo::na.locf(object, # 대상
na.rm = TRUE, # NA가 있으면 제거하겠다는 의미
fromLast = FALSE) # TRUE로 설정 시 이전 값이 아니라 이후 값을 가져오라는 의미
바로 함수를 적용해보자.
여기서 설정된 v2의 원소 개수는 5개인데 Line 6에 의해 하나가 줄었다. 결측치를 처리할 때에는 원소의 개수를 빼거나 늘려서는 안된다. 그러므로 Line 8처럼 처리되어야 한다.
연습문제를 풀어보자.
subway2.csv를 읽고 역이름을 채워보아라.
내 풀이 먼저 추가한다.
선생님과 거의 비슷하지만 예전부터 강조한 중요한 점이 있다.
Line 3의 결측치 처리 방법인데 내 방식은 값 전체가 수정되는 방식이므로 시간이 오래 걸린다.
그러므로 선생님 풀이처럼 결측치만 치환되는 방식으로 접근하여야겠다.
'배우기 > 복습노트[R과 분석]' 카테고리의 다른 글
[실습문제] 2023. 11. 28.(화) (3문제) (0) | 2023.11.29 |
---|---|
[복습] R(programming language)에서 날짜 추출하기(Sys.Date, Sys.time, lubridate 등) + 복습후기(20231128) (0) | 2023.11.29 |
[복습] R(programming language) 반복 제어문(next, break, quit) (0) | 2023.11.29 |
[복습] R(programming language)에서 SQL 작성하기(sqldf 패키지) (0) | 2023.11.28 |
[복습] R(programming language)의 숫자(수학/통계) 함수 (0) | 2023.11.28 |