ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • R 프로그래밍 8 - R 데이터 프레임을 피벗 테이블 처럼 활용하기(dcast, melt)
    데이터분석/R 2021. 11. 7. 15:11
    반응형

    오늘은 R의 데이터 프레임을 피벗테이블처럼 활용하는 법에 대해서 알아보도록 하겠습니다.

     

    여러분 피벗테이블은 왜 쓸까요?

    바로 데이터프레임을 원하는 데로 길게(long format)하거나 넓게(wide format)하거나 하고 싶어서입니다.

     

    R에서도 이런 게 가능합니다.

    R에는 패키지라는 개념이 있습니다. 남이 만들어둔 함수를 내가 가져다가 쓸 수 있는 개념이라고 보시면 됩니다.

     

    R에 reshape2 패키지를 이용해서 데이터 프레임을 자유자재로 길게 하거나 넓게 하거나 하는 것이 가능합니다.

    일단 패키지를 설치해봅시다.

    #reshape2 설치하기
    install.packages("reshape2")
    
    #reshape2 불러오기
    library(reshape2)

     

    이런 식으로 남이 만들어둔 패키지를 가져다가 내 컴퓨터에서 활용하는 것이 가능합니다.

    오늘은 reshape2 안에 있는 dcast함수와 melt 함수에 대해서 알아보도록 하겠습니다.

     

     

    오늘의 데이터는 r의 hello world격인 mtcars 데이터를 활용하도록 하겠습니다.

    mtcars 데이터는 r의 내장 데이터로써 별도의 다운로드 없이 활용이 가능합니다.

     

    mtcars 데이터를 가져와 봅시다.

    #df 변수에 mtcars 데이터 넣기
    df <- mtcars

    mtcars 데이터는 32종 자동차의 10가지 디자인과 성능 특성, 연료소모량을 담은 데이터입니다.

     

    각 칼럼 설명은 이렇습니다.

    [, 1]	mpg	Miles/(US) gallon
    [, 2]	cyl	Number of cylinders
    [, 3]	disp	Displacement (cu.in.)
    [, 4]	hp	Gross horsepower
    [, 5]	drat	Rear axle ratio
    [, 6]	wt	Weight (1000 lbs)
    [, 7]	qsec	1/4 mile time
    [, 8]	vs	Engine (0 = V-shaped, 1 = straight)
    [, 9]	am	Transmission (0 = automatic, 1 = manual)
    [,10]	gear	Number of forward gears
    [,11]	carb	Number of carburetors

    1. melt 함수(long format)로 만들기

    melt 함수는 기준이 되는 칼럼이 있고 나머지는 variable이라는 칼럼으로 묶여서 길게 펴지는 형태로 데이터 프레임을 만들어줍니다. 이는 key-value단위로 데이터를 활용해야 할 때 효과적입니다.

     

    기본 문법

    melt(데이터 프레임, id=c(기준 칼럼 1, 기준 칼럼 2...), measure = c(variable에 넣어야 하는 칼럼 1, 칼럼 2...))

     

    기존 데이터 구조

    테이블 형태로 넓게 되어있다.

    그런데 나는 carb, gear를 기준으로 나머지 값들을 보고 싶다고 한다면 어떻게 해야 할까요?

    엑셀에서는 귀찮게 그 해당 열을 모아서 value를 해야 되었을 것입니다.

    하지만 melt를 이용하면 간단하게 long-format으로 만드는 것이 가능합니다.

     

    측정 칼럼 빼고 모든 칼럼을 variable, value로 넣는 법

    # melt(원하는 데이터셋, id=c(기준으로 보고싶은 컬럼들 선택))
    meltdata <- melt(df, id=c("carb", "gear"))

     

    carb와 gear 기준으로 나머지 variable을 펴준다.

    특정 칼럼 가지고 variable과 value에 넣는 법

    #melt(데이터 프레임, id ="측정기준이 되는 컬럼", measuer = "varible이 되었으면 좋겠는 컬럼")
    meltdata2 <- melt(df, id=c("carb"), measure=c("mpg", "gear"))

    이런 식으로 하게 되면 carb를 기준으로 mpg와 gear값을 볼 수 있게 됩니다.

     

    기~일게 펴진 데이터 프레임을 볼 수 있다.

    2. dcast를 활용한 wide format 데이터 만들기

    dcast 함수는 안에 있는 value값으로 칼럼을 만들어서 데이터를 wide 하게 펴주는 함수입니다. 보통 엑셀의 피벗테이블처럼 활용하는 경우가 많으니 자주 쓰게 되는 함수라고 보시면 되겠습니다.

     

    기본 문법

    dcast(데이터 프레임, 그룹핑 기준 ~ 측정 칼럼, 원하는 집계 함수, value.var = 집계 함수에 들어갈 칼럼)

    - 집계 함수에는 sum(총합), mean(평균), length(개수), max(최댓값), min(최솟값) 등 많은 집계 함수를 활용할 수 있음

    - 커스텀하게 만든 함수도 dcast와 활용할 수 있음

     

    #dcast(데이터 프레임, 그룹핑컬럼 ~ 측정컬럼, 집계함수, 집계될 컬럼)
    dcast_data1 = dcast(df, carb ~ gear, sum , value.var = "mpg")

    여기서는 carb를 기준으로 gear마다 mpg값을 합산한다고 보시면 됩니다.

    최종 뷰는 이렇습니다.

    dcast 뷰

    위에 3,4,5는 gear가 가지고 있던 value들입니다. 그래서 carb가 1인데 gear가 3인 mpg의 총합은 61이다. 이렇게 보시면 되겠습니다. 

     

    그럼 그룹핑이 두 개일 때는 어떻게 해야 할까요? 바로 + 를 활용해주면 됩니다.

    dcast_data2 = dcast(df, am + carb ~ gear, sum , value.var = "mpg")

    이렇게 했을 때 am + carb로 두 개의 그룹핑 칼럼이 조건으로 들어가게 됩니다.

     

    그럼 결과는? 이런 식으로 피벗 된 테이블이 나오게 됩니다.

    am, carb 두개의 그룹핑된 컬럼으로 dcast가 되었다.

     

    R에서 간단히 데이터 프레임을 피봇팅 하는 법에 대해서 알아봤습니다. 이거 말고도 tidyr에 gather나 spread를 활용해서도 가능합니다. 이것도 나중에 다뤄보도록 하겠습니다.

    반응형

    댓글

Designed by Tistory.