R의 주요 데이터포맷인 데이터프레임(data.frame)을 사용하다보면 필터링을 해야 되는 경우가 많다.
필터링하는게 어렵지는 않지만 데이터프레임의 데이터가 많을 수록 성능이슈가 발생한다.
데이터가 클수록 필터링 속도는 현저하기 느려진다.
물론 이러한 성능이슈를 도와주는 R의 여러 패키지가 존재하며 대표적으로 data.table 패키지가 있다.
해당 패키지는 RDBMS와 유사하게 데이터를 인덱싱하여 보다 빠른 필터링 및 그외 여러기능을 제공한다.
(더 자세히 알고 싶다면 여기를 참고)
여기서는 data.table과 같은 패키지를 사용하지 않고 보다 빠르게 필터링 하는 방법을 알아보고자 한다.
우선 기본적인 R에서 데이터프레임을 필터링하는 방법으로는 아래 2가지가 대표적(?)이다.
df1 <- data[data$col1=='filter조건',] df2 <- subset(data, col1=='filter조건')
위와 같은 방법 data 데이터 사이즈가 500만건 정도의 데이터를 필터링 했을 경우 하드웨어 사양에 따라 조금씩 차이는 있겠지만 대략 두 방법 모두 10초 가량 소요가 되었다.
꽤 오랜시간이 소요되어 고민하던 차에 R에서 grep을 지원하는게 생각나서 아래와 같이 테스트를 해보았다.
df3 <- data[grep('filter조건', data$col1, ignore.case=T),]
테스트 결과 위 두가지 필터보다 50%이상 성능이 빠르게 나왔다.
내부적으로 어떤 차이가 있는지 좀 더 알아보고 싶지만 머 grep이니까 빠르겠지... 하고 쓴다...@.@;
끝.
'R' 카테고리의 다른 글
R을 이용한 이상치 분석 (1) | 2014.10.01 |
---|---|
R on Hadoop and Amazon EMR (0) | 2014.08.19 |
R Oracle Connection (4) | 2014.02.24 |