# naver search confirm # markdown number and equation wide & long 데이터 형태 전환 //google adsense
본문 바로가기
R_데이터 분석 기술

wide & long 데이터 형태 전환

by 노마드분석가 2022. 4. 4.

1. 들어가며

데이터를 분석하기 전에 데이터의 형태를 변환해야 하는 일은 매우 빈번하게 발생한다. 특히 ggplot2 패키지를 이용해 데이터를 시각화할 때는 데이터의 형태를 긴(long) 형태로 바꿔야 하는 일이 많다. 데이터 전처리에서 필수적으로 익혀야 wide & long 데이터 프레임 변환에 대해 알아보자.

 

2. wide & long 형태란?

하나의 행에 여러가지 값을 담고 있는 데이터 프레임을 wide 형태라고 볼 수 있다. 아래 <그림 1>은 wide 형태와 long 형태의 데이터 프레임 예를 보여준다. 

 

[그림 1] wide & long 형태의 데이터 프레임

 

일반적으로 wide 형태의 포맷에 익숙하지만 분석의 목적에 따라 long 형태로 바꿔야 할 일이 자주 발생한다. 이때 사용할 수 있는 R 패키지는 다양한데, 가장 대표적인 reshape2 패키지를 이용해 변환해 보자. 

 

3. reshape2 기본 문법

먼저 두 가지 핵심 함수가 있다. 아래 두 함수를 이용해 데이터 프레임을 long <--> wide 형태로 변환한다.  

  • melt : wide format --> long format
  • dcast : long format --> wide format

(1) melt 함수의 중요 인자

melt(데이터프레임, id.vars, measure.vars)

 

위의 기본 문법에서 id.vars와 measure.vars가 중요하다. 위의 <그림 1>을 아래 <그림 2>로 재구성해 보자. 

id.vars = "지역", measure.vars = c("인구", "기온", "GDP")로 지정했을 때 <그림 2>와 같이 데이터 프레임이 변환된다. 

[그림 2] melt 함수의 구성 인자

그럼 코드를 이용해 결과물을 확인해보도록 하자 

 

# 기본 데이터 생성 -----------------------------------------
지역 = c('서울','경기도','부산')
인구 = c(100,110,50)
기온 = c(10,15,25)
GDP = c(200,150,120)
sample_df = data.frame(지역,인구,기온,GDP) #데이터프레임 생성
# 데이터 변환 ----------------------------------------------
library(reshape2)
sample_long = melt(data = sample_df, id.vars = "지역", 
                   measure.vars= c("인구","기온","GDP"))

 

코드를 실행하면 <그림 2>와 동일한 결과를 얻는다. melt 함수에서 id.vars와 measure.vars를 조절해서 분석가가 원하는 long format 데이터를 만들 수 있다. 위의 코드와 다르게 id.vars와 measure.vars를 구성해서 결과를 확인하기 바란다. 

 

(2) dcast 함수의 중요인자  

 

이제 <그림 2>의 long format을 원래의 wide format 으로 바꿔 보자. 

dcast(데이터프레임, 행 변수 ~ variable)

 

행 변수는 행데이터를 구성하는 key 값이다. 원래대로 돌아가려면 "지역" 변수가 행 변수가 된다. 나머지 모든 변수들(variable)을 wide format에서 열을 구성하도록 한다. dcast의 첫번째 인자는 long format 데이터 프레임이다. 

 

sample_wide = dcast(sample_long, 지역 ~ variable)

 

코드를 실행하면 원상태로(wide format) 변환된 것을 확인할 수 있다. 

 

(3) dcast로 부분 집계 변수를 만드는 경우 

 

아래 코드는 iris 데이터를 species 변수 기준으로 long format으로 변환하고 그 데이터를 다시 wide format으로 변환할때 species별 각 변수의 평균값을 계산하는 경우다. 코드를 실행해보면 그 의미를 알 수 있을 것이다. 

 

iris_long = melt(data = iris, id.vars = "c", 
                   measure.vars= c("Sepal.Length", "Sepal.Width", "Petal.Length","Petal.Width"))
iris_wide = dcast(iris_long, Species ~ variable, mean) # species범주별 각 변수의 평균
반응형

'R_데이터 분석 기술' 카테고리의 다른 글

R 교차표 작성  (0) 2022.04.08
R 주성분 분석  (0) 2022.04.07
R 다중공선성 VIF 값 계산  (0) 2022.04.04
R을 이용해 상관계수 구하기  (0) 2022.04.01
데이터 결합(join) by dplyr 패키지  (0) 2022.04.01
변수별 부분 집계 by dplyr  (0) 2022.03.31
R 전처리 최강자 dplyr 패키지  (0) 2022.03.31

댓글