[R] 데이터를 컬럼(id) 기준으로 합치기 (Data concatenation by column)

해당 포스트는 R에서 수행하는 데이터 변환 작업 중, 컬럼(열) 기준으로 데이터를 합치기는 방법을 소개합니다.

배경

많은 분들이 데이터 분석에 관심을 보이고 계시며, 최근 회사에서도 R이나 Python을 업무에 사용하시려는 분들이 늘어나고 있습니다. 두가지 언어를 조금씩 사용할 줄 알다보니 다양한 질문을 받게되는데 그 중 간단하고 공개 가능한 정보들은 공유하려고 합니다.

이번 포스트에서는 동일한 ID를 가지는 데이터들을 콤마(,)로 이어붙여 새로운 컬럼을 생성하는 방법을 소개 합니다.

질문 (Question)

아래 그림과 같이 데이터를 변환하려고 합니다. R 코딩으로 가능할까요?

답변 (Answer)

먼저, 엑셀(Excel)에서 사용하는 모든 함수 및 작업은 R에서도 가능하다고 보시면 됩니다.

질문 데이터는 id컬럼의 값들을 비교하여 동일한 값을 가지는 경우, B열의 값들을 콤마(,)로 이어 붙이도록 코딩하면 됩니다.

1. 패키지 로드

해당 작업에서는 dplyr 패키지를 이용합니다. dplyr은 파이프(%>%)를 이용한 직관적인 처리를 지원해주는 패키지로 R 사용자에겐 필수 패키지 중 하나 입니다. (참고)

  • R 코드
library(dplyr)

2. 데이터 생성

전달받은 엑셀(excel)을 참고하여 원본 데이터를 생성합니다.

  • R 코드
mydata <- data.frame(id = c(1,1,1,1,2,2,2),
                     days = c("월요일","화요일","수요일","목요일","금요일","토요일","일요일"))
mydata
  • 출력

3. 데이터 변환

데이터 변환에는 위에서 설명한 dplyr의 파이프(%>%)를 이용합니다. 파이프(%>%)는 선행 작업과 후행 작업을 이어주는 역할로 순차적인 작업을 한라인으로 처리할 수 있게 도와줍니다.

  • R 코드
mydata %>% 
  group_by(id) %>% 
  summarise(new_days=paste(days, collapse=","))

위 코드를 단위를 순서대로 해석해 본다면 다음과 같습니다.

  1. mydata 선택
  2. 1.에서 선택한 데이터에서 id 컬럼을 기준으로 그룹핑
  3. 2.에서 그룹핑된 데이터에서 days 컬럼의 데이터들을 콤마(,)로 이어 붙이고(paste) new_days라는 컬럼에 입력
  • 출력

summarise() ungrouping output (override with .groups argument)
위 메세지는 경고 메시지로 기존 group 함수와 summarise() 내부에서 작동하는 .groups 함수가 중복되면서 나타나는 메시지 입니다. 작업하시면서 경고 메시지를 자주 접하시게 될텐데 Error Message가 아니라면 대부분 스킵하셔도 됩니다.

정리

이번 포스트에서는 dplyr::summarise() 함수를 이용해 데이터를 특정 열 기준으로 붙이는(concatenation) 방법을 설명드렸습니다. dplyr 패키지에서는 summarise() 함수 외에도 유용한 함수들을 제공하고 있으며 데이터 처리/변환의 필수 패키지인만큼 다양한 연습을 해보시는걸 추천드립니다.

관련 링크

[1] stackoverflow - Concatenate rows in a column by ID in R
[2] dplyr 메시지summarise ()재 그룹핑 출력을 'x'로 해석하는 방법 (.groups 인수로 재정의)?
[3] https://dplyr.tidyverse.org/


banner-request-analysis