group_by 와 summarise 함수를 활용한다면 범주별로 요약통계량을 계산할 수 있습니다.
예를 들어 R 내장 데이터인 iris 데이터셋을 이용해보겠습니다. iris 데이터셋에는 Species 라는 범주형 변수와 꽃받침(Sepal) 의 길이와 너비, 꽃잎(Petal) 의 길이와 너비를 포함하고 있습니다.
iris 데이터의 구조를 보기 위해 str(iris) 라고 써주면 다음과 같은 결과가 나옵니다.
5개의 변수에 150개의 관측치과 각 변수 유형이 나와있습니다. Species 변수 유형은 factor 이고 나머지는 숫자형 변수로 구성되어 있네요. 이 때 Species 별로 각 변수의 요약통계량을 계산할 수 있습니다.
* 본격적으로 들어가기 전에 파이프라인(%>%) 에 대한 내용을 알아보겠습니다. 파이프라인은 dplyr 패키지 함수와 결합하여 사용하면 굉장히 유용합니다. 파이프라인은 다음과 같이 사용할 수 있습니다.
datasets %>% 사용할 함수 %>% 사용할 함수 %>% ...
이 전에 포스팅한 dplyr 함수를 바탕으로 몇 가지 예를 보겠습니다.
* iris 데이터에서 Sepal.Length, Sepal.Width 를 선택
iris %>% select(Sepal.Length, Sepal.Width)
* iris 데이터에서 Sepal.Length 가 7 이상인 데이터 추출
iris %>% filter(Sepal.Length>=7)
* iris 데이터에서 Sepal.Length 가 7 이상이고 Petal.Length 가 6 이상인 데이터 추출
iris %>% filter(Sepal.Length >=7 & Petal.Length>=6)
* iris 데이터에서 Sepal.Length 가 7 이상이고 Petal.Length 가 6 이상이고 Petal.Width 가 2 이상인 데이터 추출
iris %>% filter(Sepal.Length >=7 & Petal.Length>=6 & Petal.Width>=2)
< Species 별로 Sepal.Length의 요약통계량 계산>
iris 데이터에 Species 별로 그룹화하여 Sepal.Length 의 평균을 계산해보겠습니다.
iris %>% group_by(Species) %>% summarise(mean(Sepal.Length))
이제 추가적으로 표준편차, 중앙값, 최대값, 최소값을 구해보겠습니다.
iris %>% group_by(Species) %>% summarise(mean(Sepal.Length), sd(Sepal.Length), median(Sepal.Length), max(Sepal.Length), min(Sepal.Length))
summarise 함수에 mean(Sepal.Length), sd(Sepal.Length), median(Sepal.Length), max(Sepal.Length), min(Sepal.Length) 을 넣어주게되면 범주별 요약통계량 값이 나옵니다.
이제 각 변수 명을 따로 지정해주기 위해 다음과 같이 입력합니다.
iris %>% group_by(Species) %>% summarise(평균 = mean(Sepal.Length),
표준편차 = sd(Sepal.Length),
중앙값 = median(Sepal.Length),
최대값 = max(Sepal.Length),
최소값 = min(Sepal.Length))
* 요약 정리하면 다음과 같습니다.
이렇게 파이프라인과 각 함수를 함께 이용하면 코드를 구성할 때 큰 도움이 됩니다. 파이프연산자를 쓰지 않으면 코드 구성을 알아보기 힘들겠지만 위 그림과 같이 직관적으로 이해할 수 있습니다. group_by의 역할은 범주형 변수의 그룹화를 통해 summarise 함수로 요약통계량을 계산할 수 있습니다. 궁금한 점은 댓글로 남겨주세요!
'데이터 분석 > R 데이터 처리 & 분석' 카테고리의 다른 글
[데이터처리] 중복 데이터 제거한 데이터프레임 생성(duplicated, unique, distinct) (0) | 2020.05.17 |
---|---|
[R데이터분석] dplyr 패키지를 활용한 데이터전처리(3)(arrange,mutate) (0) | 2020.02.07 |
[R데이터분석] dplyr 패키지를 활용한 데이터전처리(1) (0) | 2020.01.29 |
[R데이터분석] factor함수 범주형 변수 다루기 (0) | 2020.01.23 |
[R 데이터분석] 조인(join) 을 이용하여 데이터 병합하기(inner join, full join, left join, right join) (2) | 2020.01.20 |