본문 바로가기

정리/데이터 분석

[R] Reshape package 를 이용한 melt, cast

728x90

안녕하세요. 이번에는 Reshape Package 를 이용해서 melt, cast를 적용하는 예시를 보여주려고 한다.

 

 

[목차]

1. melt 함수 사용법

2. cast 함수 사용법

 

 

[내용]

1. melt 함수 사용법

먼저 예시를 보겠습니다.

# 데이터 프레임 생성
data <- data.frame(
  ID = c(1, 2, 3),
  Name = c("John", "Jane", "Bob"),
  Math = c(90, 80, 75),
  English = c(88, 92, 70)
)

# 데이터 프레임 출력
print("Original Data:")
print(data)

# Melt 수행
melted_data <- melt(data, id.vars = c("ID", "Name"))

# Melt된 데이터 출력
print("Melted Data:")
print(melted_data)

위와 같이 data 의 형태는 ID Name Math English 열을 갖고있는 3행 4열의 테이블입니다.

melt 적용 전/후(행으로 구분하기)
Melt 수행 결과

melt 함수는 pivot 되어 있던 값들을 원복 시키는 것이라고 보면 됩니다. 조금 더 표현을 가볍게 하자면... 열로 구분하던 값들을 행으로 보내서 관리하려는 필요 나 의지가 있는 경우에 적용하면 되는 함수입니다.

melt 함수 전의 상태는 pivot이 적용돼서 압축적으로 데이터를 표기하여 용량상으로 효율적입니다. 다만 melt 적용후 효율적이지 못한 부분은 ID, Name 값 자체의 중복을 발생시킵니다.

melt 함수의 주요 매개변수는 다음과 같습니다.
- data: 변환할 데이터 프레임입니다.
- id.vars: 변환하지 않고 유지할 열(변수)의 이름을 나타내는 벡터입니다.
- measure.vars: "melt"하여 새로 생성될 열(변수)의 이름을 나타내는 벡터입니다.

 

2. cast 함수 사용법

 

# Melt된 데이터 프레임 생성
melted_data <- data.frame(
  ID = rep(c(1, 2, 3), each = 2),
  Name = rep(c("John", "Jane", "Bob"), each = 2),
  variable = c("Math", "English", "Math", "English", "Math", "English"),
  value = c(90, 88, 80, 92, 75, 70)
)

# Melt된 데이터 출력
print("Melted Data:")
print(melted_data)

# Cast 수행
casted_data <- cast(melted_data, ID + Name ~ variable, value.var = "value")

# Cast된 데이터 출력
print("Casted Data:")
print(casted_data)

위 코드에서 cast 함수는 melt 함수로 만들어진 데이터를 다시 원래의 형태로 변환합니다. 여기서 ID + Name ~ variable는 새로운 데이터 프레임의 행과 열을 지정하는데 사용됩니다. 이를 통해 "Math"와 "English"의 값이 각각의 열로 배치됩니다.

cast 적용 전/후 (열로 구분하기)

 

melt 결과물

정리하면 Melt 함수를 기억하기 쉽게 비유하자면  "뭉쳐있던  record들을 녹여서 record가 느는 함수"라고 보면 됩니다. 반대로 Cast 함수는 늘어난 record들을 뭉쳐주는 역할을 합니다. 여기서 "variable" 열은 원래의 "Math"와 "English" 열을 대신하며, "value" 열에는 각 변수의 값이 매핑되어 있습니다. 이렇게 데이터를 "long" 형식으로 변환하면 여러 가지 분석 작업에서 편리하게 사용할 수 있습니다.