brunch

You can make anything
by writing

C.S.Lewis

by 이영민 Jul 12. 2016

R을 이용한 데이터 재구조화

with reshape2

행렬 형태의 데이터를 다루다 보면 데이터의 구조를 바꿔 주어야 할 때가 있다.


예를 들면, 열(column)이 많은 넓은(wide) 형태의 행렬을 행(row)이 많은 긴(long) 형태로 바꾸어야 하거나 그 반대의 경우


그럴 때 R에서 제공하는 패키지 중에서 'reshape2'를 쓰면 좋다. 먼저, 패키지를 설치하고 불러와 보자.

> install.packages('reshape2')
> library(reshape2)


SNS 데이터를 예로 들어 설명해 보겠다. 아래의 표처럼 각 사용자가 다른 사용자를 태그한 경우를 생각해 보자. A는 F와 G를 각각 1번씩 태그했고, B는 H를 1번 태그했으며 C 역시 H를 1번 태그했다는 뜻이다.


사용자들의 관계를 나타낸 행렬 예시

 

아래 표를 다시 보자. A와 B의 경우, 첫 번째 칼럼(User1)에도 있고, 두 번째 칼럼(User2)에도 들어가 있다. 지저분하다. 이 표를 깔끔하게 정리해 보자.

 

A와 B가 중복되어 들어가 있음


이때 사용할 함수는 'dcast'로, 이는 아래로 긴 행렬(long matrix)을 옆으로 넓은 행렬(wide matrix)로 바꿔줄 때 사용하는 함수다. 아래 표현에서 'data'는 wide한 포맷으로 바꾸어줄 데이터프레임의 이름, 'User1'은 각 행에 들어갈(즉, 1열) 변수명, 'User2'는 각 열에 들어갈(즉, 1행) 변수명, 'sum'은 'User1'과 'User2' 가 함께 존재할 때의 'Count' 값의 합이다.

> wide <- dcast(data, User1 ~ User2, sum)


wide를 출력해 보면 아래와 같이 옆으로 넓어진 결과를 확인할 수 있으며, 중복되는 값이 깔끔하게 정리된 것을 볼 수 있다.

> wide
            A   B   F   G   H
1     A   0   0   1   1   0
2     B   0   0   0   0   1
3     C   0   0   0   0   1
4     D   1   0   0   0   0
5     E   0   1   0   0   0


반대로 wide 포맷을 long 포맷을 바꾸고자 할 때는 'melt' 함수를 사용하면 된다.


'dcast' 함수와 'melt' 함수 사용 방법



(제목 배경 이미지 출처)

작가의 이전글 인공지능 이슈
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari