pivot_wider()로 긴 형식에서 넓은 형식으로
키-값 쌍을 다시 넓은 형식의 테이블로 펼칩니다.
pivot_wider()로 긴 형식에서 넓은 형식으로은(는) CoddyKit의 무료 R Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 R Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
넓은 형식으로 변환할 때
긴 형식은 분석에 적합하지만, 보고서와 스프레드시트, 특정 알고리즘(예: 상관 행렬)에서는 넓은 형식이 필요한 경우가 많습니다. pivot_wider()는 pivot_longer()의 역변환으로, 한 열의 값을 여러 새 열로 펼칩니다.
library(tidyr)
# Long format: one row per student-quarter combination
long_df <- data.frame(
student = c('Alice','Alice','Alice','Bob','Bob','Bob'),
quarter = c('Q1','Q2','Q3','Q1','Q2','Q3'),
score = c(85, 88, 92, 90, 85, 88)
)
print(long_df)
cat('\n', nrow(long_df), 'rows x', ncol(long_df), 'cols')pivot_wider() 기초
pivot_wider(df, names_from, values_from)는 긴 형식을 넓은 형식으로 변환합니다. names_from은 값이 새 열 이름이 될 열을 지정하고, values_from은 값이 새 열을 채우는 데 사용될 열을 지정합니다.
library(tidyr)
long_df <- data.frame(
student = c('Alice','Alice','Alice','Bob','Bob','Bob'),
quarter = c('Q1','Q2','Q3','Q1','Q2','Q3'),
score = c(85, 88, 92, 90, 85, 88)
)
wide_df <- pivot_wider(
long_df,
names_from = quarter,
values_from = score
)
print(wide_df)id_cols — 행 키 식별하기
id_cols는 넓은 형식의 출력에서 각 행을 고유하게 식별하는 열을 지정합니다. 기본적으로 dplyr은 names_from 또는 values_from에 지정되지 않은 모든 열을 사용합니다. 이를 명시적으로 설정하면 예상하지 못한 그룹화가 발생하는 것을 막을 수 있습니다.
library(tidyr)
df <- data.frame(
year = c(2023,2023,2024,2024),
region = c('East','West','East','West'),
quarter = c('Q1','Q1','Q1','Q1'),
revenue = c(100, 200, 120, 220)
)
pivot_wider(
df,
id_cols = c(year, quarter),
names_from = region,
values_from = revenue
)values_fill — 누락된 조합 처리
id_cols와 names_from의 일부 조합이 존재하지 않으면 결과 셀은 NA가 됩니다. values_fill을 사용하여 이러한 누락된 값을 기본값(예: 개수나 합계에는 0)으로 바꾸십시오.
library(tidyr)
df <- data.frame(
product = c('A','A','B'),
channel = c('online','store','online'),
sales = c(100, 150, 200)
)
# 'B' has no 'store' data — fill with 0
pivot_wider(
df,
names_from = channel,
values_from = sales,
values_fill = 0
)names_prefix — 접두사 추가
names_prefix를 사용하여 새 열 이름 앞에 문자열을 추가하십시오. 이렇게 하면 names_from의 값이 숫자일 때 발생하는 문제를 피하거나 열 이름을 더 설명적으로 만들 수 있습니다.
library(tidyr)
df <- data.frame(
student = c('Alice','Alice','Bob','Bob'),
quarter = c(1, 2, 1, 2),
score = c(85, 90, 78, 82)
)
# Without prefix: columns named '1' and '2' (problematic)
# With prefix: q1, q2
pivot_wider(
df,
names_from = quarter,
values_from = score,
names_prefix = 'q'
)여러 values_from 열
values_from에 벡터를 전달하면 여러 값 열을 한 번에 피벗할 수 있습니다. 결과 열의 이름은 값 열 이름과 범주를 결합한 value_name으로 지정됩니다.
library(tidyr)
df <- data.frame(
region = c('East','East','West','West'),
period = c('Q1','Q2','Q1','Q2'),
revenue = c(100, 120, 200, 210),
units = c(10, 12, 20, 22)
)
pivot_wider(
df,
names_from = period,
values_from = c(revenue, units)
)values_fn으로 중복 처리
동일한 id + name 조합에 여러 값이 있으면 pivot_wider는 어느 값을 사용해야 할지 알 수 없으므로 경고와 함께 목록 열을 반환합니다. 집계 함수를 지정하여 values_fn으로 이 문제를 해결하십시오.
library(tidyr)
# Duplicate rows: Alice has two Q1 scores
df <- data.frame(
student = c('Alice','Alice','Alice','Bob','Bob'),
quarter = c('Q1','Q1','Q2','Q1','Q2'),
score = c(85, 87, 90, 78, 82)
)
# Resolve duplicates by taking the mean
pivot_wider(
df,
names_from = quarter,
values_from = score,
values_fn = mean
)이름이 지정된 목록과 values_fn
이름이 지정된 목록을 values_fn에 전달하면 여러 값 열에 서로 다른 집계 함수를 동시에 적용할 수 있습니다. 서로 다른 요약 방법이 필요한 여러 값 열을 피벗할 때 특히 유용합니다.
library(tidyr)
df <- data.frame(
region = c('East','East','West','West'),
period = c('Q1','Q1','Q1','Q1'),
revenue = c(100, 120, 200, 210),
orders = c(10, 12, 20, 22)
)
pivot_wider(
df,
names_from = period,
values_from = c(revenue, orders),
values_fn = list(revenue = sum, orders = sum)
)교차 집계표 만들기
데이터 프레임 형식의 교차 집계표(분할표)는 dplyr::count()로 개수를 센 후 pivot_wider()를 사용하면 쉽게 만들 수 있습니다. 이렇게 하면 두 패키지의 기능을 결합하여 빈도 분석을 수행할 수 있습니다.
library(tidyr)
library(dplyr)
survey <- data.frame(
dept = c('HR','HR','Eng','Eng','HR','Eng'),
response = c('Yes','No','Yes','Yes','Yes','No')
)
survey %>%
count(dept, response) %>%
pivot_wider(
names_from = response,
values_from = n,
values_fill = 0
)왕복 변환: 긴 형식 -> 넓은 형식 -> 긴 형식
pivot_longer()와 pivot_wider()의 역관계를 이해하면 오류를 찾아내는 데 도움이 됩니다. 왕복 변환(긴 형식->넓은 형식->긴 형식)을 수행하면 행 순서와 형 변환을 제외하고 원래 데이터가 반환되어야 합니다.
library(tidyr)
original_long <- data.frame(
id = c(1,1,2,2),
key = c('a','b','a','b'),
value = c(10, 20, 30, 40)
)
# Go wide
wide <- pivot_wider(original_long, names_from=key, values_from=value)
print(wide)
# Go long again
pivot_longer(wide, -id, names_to='key', values_to='value')실습: 점수 보고서
대표적인 사용 사례는 긴 형식의 시험 점수 표를 학생별·과목별 보고서 표로 재구성하는 것입니다. dplyr::arrange()와 rename()을 함께 사용하면 깔끔하고 발표에 바로 사용할 수 있는 결과를 만들 수 있습니다.
library(tidyr)
library(dplyr)
scores <- data.frame(
student = c('Alice','Alice','Bob','Bob','Carol','Carol'),
subject = c('Math','Science','Math','Science','Math','Science'),
score = c(92, 88, 85, 91, 79, 83)
)
scores %>%
pivot_wider(names_from=subject, values_from=score) %>%
mutate(average = round((Math + Science) / 2, 1)) %>%
arrange(desc(average))빠른 확인
동일한 id + name 조합에 여러 값이 있을 때 pivot_wider()를 호출하면 어떻게 됩니까?
복습: pivot_wider()
긴 형식을 넓은 형식으로 변환할 때의 핵심 내용:
pivot_wider(names_from, values_from)는 키 열을 여러 새 열로 펼칩니다id_cols는 각 행을 식별하는 열을 지정합니다values_fill = 0(또는 임의의 스칼라 값)는 누락된 조합을 채웁니다names_prefix는 문자열을 앞에 붙여 숫자 열 이름이나 모호한 열 이름을 피합니다values_fn은 집계 함수로 중복된 셀 값을 처리합니다values_from에 벡터를 전달하면 여러 값 열을 동시에 피벗할 수 있습니다count()후에 사용하면 교차 집계표를 효율적으로 만들 수 있습니다
library(tidyr)
library(dplyr)
data.frame(
region = c('East','East','West','West'),
metric = c('revenue','units','revenue','units'),
value = c(100, 10, 200, 20)
) %>%
pivot_wider(
names_from = metric,
values_from = value,
values_fill = 0
) %>%
mutate(revenue_per_unit = revenue / units)자주 묻는 질문
“pivot_wider()로 긴 형식에서 넓은 형식으로” 강의는 무료인가요?
네 — “pivot_wider()로 긴 형식에서 넓은 형식으로” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 R Academy 강의 전체를 잠금 해제할 수 있습니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“pivot_wider()로 긴 형식에서 넓은 형식으로”에서 뭘 배우나요?
키-값 쌍을 다시 넓은 형식의 테이블로 펼칩니다. 브라우저에서 직접 실행하는 실습 코드로 R Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
R Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 R Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“pivot_wider()로 긴 형식에서 넓은 형식으로” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 R Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 R Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- pivot_longer()로 넓은 형식에서 긴 형식으로
- pivot_wider()로 긴 형식에서 넓은 형식으로
- 문자열 열을 위한 separate()와 unite()
- 데이터 프레임 중첩 및 중첩 해제