[R] 연습

[R] reshape 패키지 활용하기

Simon Yoon 2021. 12. 17. 22:50

지난 포스팅에서 다루었던 내용은 정규화(Normalization)를 하는 방법에 대한 것이었다.

데이터를 본격적으로 분석하기에 앞서서 데이터를 탐색하는 과정은 매우 중요하기 때문에

이번에는 피벗 테이블을 작성할 수 있는 reshape 패키지를 다루는 연습을 할 것이다.

 

이번 포스팅에서는 insurance 데이터를 사용할 것이다.

insurance.csv
0.05MB
insurance 데이터의 일부


Q. 주어진 데이터를 피벗 테이블처럼 구성하고 싶다면?

A. reshape 패키지의 melt()와 cast() 함수를 사용하자.

 

melt() 함수는 여러 개의 열을 취해서 하나의 열로 쌓는다.

예시를 한번 보자.

# 라이브러리 설치
install.packages("reshape")
library(reshape)

# 성(sex)와 지역(region)을 기준으로 melt()
mlt <- melt(df, id = c("sex","region"))

 

위의 결과처럼 melt() 함수를 사용하면 기준변수 성(sex)과 지역(region)을 중심으로 'variable'에 나머지 변수명, 'value'에 값이 들어가게 된다. 이렇게 적당한 형태가 만들어졌다면, cast() 함수를 사용해서 원하는 형태로 계산할 수 있다.

예를 들어 다음의 코드를 실행해보면,

# cast(data, formula = ...~variable, fun)
cast(mlt, sex~variable, mean)

 

cast() 함수 실행 결과

위의 결과처럼 melt()와 cast()를 사용하면 원하는 기준으로 요약 통계량을 확인하기 쉽다.

 

그렇다면, 이번에는 지역(region)을 중심으로 "age", "bmi", "children" 변수만 평균(mean)을 확인하고 싶다면 어떻게 할 수 있을까?

cast(mlt, region~variable, subset = variable==c("age", "bmi", "children"), mean)

 

이렇게 코드를 작성할 수 있을 것이다. 특정 변수만 원한다면 subset = 을 포함해주면 된다. 그러면 아래와 같은 결과를 확인할 수 있다.

cast() 함수 실행 결과

 

 

★ 예시문제1)

insurance 데이터에서 자녀 수(children)에 따른 지역(region)별 요금(charges) 평균을 알고 싶다고 한다. reshape 패키지를 활용해서 다음의 예시의 결과와 같이 출력되도록 코드를 작성하여라.

(hint: 끝에 있는 (all)의 경우에는 cast() 함수안에 margins=c("grand_row", "grand_col")를 넣어주면 된다)

 

 

 

예시답안)

mlt2 <- melt(df, id = c("children", "region"), measure = c("charges"))
cast(mlt2, children~region, margins=c("grand_row", "grand_col"), mean)

 

 

※ 참고: 코드 예시는 해당 함수를 활용하기 위한 방법으로 제시한 것입니다. 같은 결과 도출을 위한 다른 방법이 존재할 수도 있습니다.

'[R] 연습' 카테고리의 다른 글

[R] 차원축소(MDS편)  (0) 2021.12.19
[R] reshape2 패키지 활용하기  (0) 2021.12.18
[R] 정규화(Normalization)편  (0) 2021.12.12
[R] 차원축소 (PCA편)  (2) 2021.12.11
[R] 데이터 정제하기 (이상값편)  (0) 2021.12.10