티스토리 뷰

반응형

아래와 같은 데이터를 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) 승차  17,465   18,434    50,313    93,398    78,705   86,342   93,585  

서울역(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 캠퍼스 머신러닝기반의 빅데이터분석 양성과정

반응형
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday