티스토리 뷰
아래와 같은 데이터를 R로 읽어오면
아래와 같이 공백을 NA로 채우게 됩니다.
> subway <- read.csv("subway2.csv", stringsAsFactors = F, skip = 1, na.strings = '')
> subway
전체 구분 X05.06 X06.07 X07.08 X08.09 X09.10 X10.11 X11.12 ...
1 서울역(1) 승차 17,465 18,434 50,313 93,398 78,705 86,342 93,585 ...
2 <NA> 하차 7,829 48,553 110,250 233,852 121,983 79,628 75,577 ...
3 시 청(1) 승차 2,993 4,473 7,633 10,404 13,328 16,953 25,467 ...
4 <NA> 하차 4,142 19,730 67,995 175,458 83,777 48,363 47,519 ...
5 종 각 승차 7,371 7,836 14,545 24,578 23,691 32,290 47,470 ...
6 <NA> 하차 4,861 29,757 93,579 245,221 153,933 88,680 83,402 ...
...
이럴 경우 NA 값을 이전 행의 값으로 치환하는 방법!
zoo 패키지의 na.locf() 라는 함수를 사용해주면 속 시원하게 해결해줍니다.
데이터 프레임 적용 시 각 컬럼별 NA값을 이전 행 값으로 치환해줍니다.
zoo::na.locf : NA를 이전 행 값으로 치환
na.locf(object,
fromLast) # fromLast = TRUE : NA를 다음 행 값으로 치환
> install.packages("zoo")
> library(zoo)
> na.locf(subway)
전체 구분 X05.06 X06.07 X07.08 X08.09 X09.10 X10.11 X11.12
1 서울역(1) 승차 17,465 18,434 50,313 93,398 78,705 86,342 93,585
2 서울역(1) 하차 7,829 48,553 110,250 233,852 121,983 79,628 75,577
3 시 청(1) 승차 2,993 4,473 7,633 10,404 13,328 16,953 25,467
4 시 청(1) 하차 4,142 19,730 67,995 175,458 83,777 48,363 47,519
5 종 각 승차 7,371 7,836 14,545 24,578 23,691 32,290 47,470
6 종 각 하차 4,861 29,757 93,579 245,221 153,933 88,680 83,402
Q. 사용자 정의 함수
> dis <- read.csv("전염병발병현황.csv", stringsAsFactors = F)
> f_fillna <- function(x) {
v1 <- c() # 함수의 결과를 벡터에 저장
for(i in 1:length(x)) {
if(is.na(x[i])) {
v1 <- c(v1,x[i-1])
} else {
v1 <- c(v1,x[i])
}
}
return(v1)
}
> apply(dis[,-1], 2, f_fillna)
참고: KIC 캠퍼스 머신러닝기반의 빅데이터분석 양성과정
'R > Process' 카테고리의 다른 글
[R] 데이터들의 순위 출력 - rank (0) | 2019.01.13 |
---|---|
[R] n번째 이전(이후) 행의 값 가져오기 - data.table::shift() (0) | 2019.01.12 |
[R] 교차 테이블로 데이터 구조 변경하기 - melt, dcast 함수 (2) | 2019.01.08 |
[R] R에서 SQL문법으로 데이터 조작하기 - sqldf 패키지 (0) | 2019.01.08 |
[R] plyr 패키지로 그룹(join) 연산 하기 - adply(), ddply() 함수 (0) | 2019.01.08 |