'do.call'에 해당되는 글 1건

  1. 2015.10.05 R의 split 활용

R의 split 활용

|



R의 apply 함수들을 살펴봤는데 이와 함께 사용할 수 있는 유용한 split() 함수에 대해서 알아보도록 하자. 

split

split은 말 그대로 데이터를 나누는 함수이다. 

벡터, 리스트, 데이터셋과 같은 객체를 지정된 팩터(factor)에 따라 분리하는 기능을 한다. 


split을 이해하기 위해서 먼저 데이터를 생성해보자. 

rnorm(10)을 이용해서 평균 0, 표준편차 1인 정규분포의 수 10개를 생성하고, 

runif(10)를 이용해서 균등분포를 갖는 10개의 수를 만들고, 

rnorm(10, 1)을 통해 평균 1, 표준편차 1인 정규분포의 임의의 숫자 10개를 만든다. 


그리고 gl(3, 10)을 통해 3개의 팩터(factor)1, 2, 3에 해당하는 각각의 수 10개를 만든다. 

이후 split(x, f)로 임의의 수 30개를 각각 10개씩 분리했다. 


이렇게 분리한 데이터에서 대해 각각의 팩터에 대한 평균을 구할 경우, 

다음과 같이 lapply를 적용할 수 있다. 


데이터셋에 Split 적용

이번에는 데이터 셋을 가지고 생각해 보자. 


공기의 오염도를 나타내는 airquality 데이터셋을 가져와서 월별로 평균을 구한다고 가정해 보자. 

이때 위처럼 split을 적용하면 airquality 데이터를 airquality$Month로 분할할 수 있다. 

그리고 lapply를 통해 "Ozone", "Solar.R", "Wind" 필드에 대해 평균을 구하면 다음과 같다. 


결과를 리스트가 아닌 벡터로 활용하기 위해서는 sapply를 사용하면 된다. 

그리고 NA 값을 제외하고 싶은 때는 na.rm = TRUE를 지정해서 월별 평균을 최종적으로 구할 수 있다. 


좀 더 복잡한 경우를 생각해 보자. 

오존 오염도가 월별로 가장 높은 날짜(월, 일)와 해당 오존 오염도를 출력해보는 예제를 만들어보자. 

이 경우, 데이터 셋을 월별, 오존 오염도 순으로 정렬을 해야 하고

정렬된 데이터에 월별로 split을 적용한 다음, 

lapply나 sapply로 월, 일, 오존 오염도를 출력하면 된다. 


최종 결과는 다음과 같이 나오면 된다. 


여러가지 방법이 있겠지만 지금까지 정리한 내용으로 구성한 소스는 다음과 같다. 


sapply를 적용하니 행과 열이 반대로 나와서 do.call(rbind...)를 사용했다. 

더 나은 방법이 있으면 댓글로 남겨주기 바란다~~


미니의 R 주요 강좌...

데이터 통계 분석을 위한 R 설치와 활용

R 실행을 위한 기본적인 내용들~

R 데이터 구조에 대한 정리

R 패키지 설치하기

R 데이터셋 처리 함수들에 대한 간단한 정리~

R 데이터셋 정렬하기~

R 데이터셋의 일부 데이터 가져오기

R의 lapply, sapply, vapply를 이해하자~

R의 apply, tapply의 활용법을 알아보자~

R의 split 활용

R의 함수 작성 및 활용~

R 시뮬레이션 - 랜덤 변수 샘플링

R 함수에서 캐시 활용하기~

R 디버깅 툴 활용하기~


신고



Trackback 0 And Comment 0
prev | 1 | next