brunch

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

with reshape2

by 이영민

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


예를 들면, 열(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' 함수 사용 방법



(제목 배경 이미지 출처)

keyword
작가의 이전글인공지능 이슈