그룹별 요약과 group_by()
그룹별로 데이터를 집계하고 그룹별 통계를 계산합니다.
그룹별 요약과 group_by()은(는) CoddyKit의 무료 R Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 R Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
데이터를 그룹화하는 이유
데이터 그룹화는 데이터 분석에서 가장 강력한 작업 중 하나입니다. 전체 데이터 세트에 대해 통계를 계산하는 대신 각 그룹 내에서 계산할 수 있습니다. dplyr 패키지에서는 group_by() 다음에 summarize()를 사용하여 이를 직관적으로 수행합니다.
library(dplyr)
# Sample sales data
sales <- data.frame(
region = c('North','North','South','South','East'),
revenue = c(120, 95, 200, 175, 88),
units = c(10, 8, 15, 12, 7)
)
print(sales)group_by() 기초
group_by(col)는 데이터 프레임을 표시하여 이후 작업이 그룹별로 수행되게 합니다. 데이터 자체를 변경하는 것이 아니라 그룹화 메타데이터를 추가합니다. 하나 또는 여러 열을 기준으로 그룹화할 수 있습니다.
library(dplyr)
sales <- data.frame(
region = c('North','North','South','South','East'),
revenue = c(120, 95, 200, 175, 88),
units = c(10, 8, 15, 12, 7)
)
# Group by region
grouped <- sales %>% group_by(region)
print(grouped)
print(group_keys(grouped))group_by() 다음의 summarize()
summarize()(또는 summarise())는 각 그룹을 하나의 행으로 축약합니다. 새 열 이름과 적용할 요약 함수를 지정합니다. 자주 사용하는 함수로는 n(), mean(), sum(), min(), max()가 있습니다.
library(dplyr)
sales <- data.frame(
region = c('North','North','South','South','East'),
revenue = c(120, 95, 200, 175, 88),
units = c(10, 8, 15, 12, 7)
)
sales %>%
group_by(region) %>%
summarize(
n = n(),
mean_revenue = mean(revenue),
total_units = sum(units)
)n()으로 개수 세기
summarize() 안의 n()은 각 그룹의 행 수를 반환합니다. 인수가 필요하지 않습니다. 조건에 맞는 행을 세려면 sum(condition)을 사용하십시오. n_distinct(col)는 고유한 값의 개수를 셉니다.
library(dplyr)
employees <- data.frame(
dept = c('HR','HR','Eng','Eng','Eng','Sales'),
salary = c(55000, 60000, 95000, 105000, 90000, 70000),
senior = c(FALSE, TRUE, TRUE, TRUE, FALSE, FALSE)
)
employees %>%
group_by(dept) %>%
summarize(
count = n(),
senior_count = sum(senior),
avg_salary = mean(salary)
)여러 열을 기준으로 그룹화하기
group_by()에 여러 열을 전달할 수 있습니다. 데이터에 존재하는 값의 모든 조합을 기준으로 그룹이 형성됩니다. 이는 교차표와 계층적 요약에 유용합니다.
library(dplyr)
orders <- data.frame(
region = c('North','North','South','South','North','South'),
product = c('A','B','A','B','A','A'),
sales = c(100, 200, 150, 250, 120, 180)
)
orders %>%
group_by(region, product) %>%
summarize(
total_sales = sum(sales),
orders = n(),
.groups = 'drop'
).groups 인수
summarize()를 실행한 후 결과는 마지막 그룹화 변수만 제외한 나머지 변수로 계속 그룹화됩니다. .groups 인수로 이 동작을 제어할 수 있습니다.
'drop_last'— 기본값이며 마지막 그룹 수준을 제거합니다'drop'— 모든 그룹화를 제거합니다'keep'— 모든 그룹화를 유지합니다
library(dplyr)
df <- data.frame(
year = c(2022,2022,2023,2023),
quarter = c('Q1','Q2','Q1','Q2'),
revenue = c(100, 120, 130, 150)
)
# .groups = 'drop' ensures ungrouped result
result <- df %>%
group_by(year, quarter) %>%
summarize(total = sum(revenue), .groups = 'drop')
print(result)
print(is.grouped_df(result)) # FALSEungroup()으로 명시적으로 그룹화 해제하기
언제든지 ungroup()을 호출하여 데이터 프레임에서 그룹화 메타데이터를 제거할 수 있습니다. 이후 작업이 그룹별 데이터가 아니라 전체 데이터에 적용되도록 할 때 중요합니다.
library(dplyr)
df <- data.frame(
dept = c('HR','HR','Eng','Eng'),
salary = c(55000, 60000, 95000, 105000)
)
# Without ungroup: rank is within group
df %>%
group_by(dept) %>%
mutate(rank_in_dept = rank(salary)) %>%
ungroup() %>%
mutate(rank_overall = rank(salary))group_keys()와 n_groups()
group_keys()는 고유한 그룹 조합을 보여 주는 데이터 프레임을 반환합니다. n_groups()는 존재하는 그룹 수를 알려 줍니다. 그룹화된 작업을 수행하기 전에 구조를 살펴볼 때 유용합니다.
library(dplyr)
df <- data.frame(
country = c('US','US','UK','UK','DE'),
category = c('A','B','A','A','B'),
value = c(10, 20, 15, 25, 30)
)
grouped <- df %>% group_by(country, category)
cat('Number of groups:', n_groups(grouped), '\n')
print(group_keys(grouped))여러 통계량으로 요약하기
하나의 summarize() 호출에서 여러 요약 통계량을 계산할 수 있습니다. 개수, 평균, 중앙값, 표준 편차, 최솟값, 최댓값, 사용자 지정 계산을 한 번에 결합할 수 있습니다.
library(dplyr)
scores <- data.frame(
class = c('A','A','A','B','B','B','C','C'),
score = c(85, 90, 78, 92, 88, 95, 70, 75)
)
scores %>%
group_by(class) %>%
summarize(
n = n(),
mean_score = round(mean(score), 1),
median_score = median(score),
sd_score = round(sd(score), 2),
min_score = min(score),
max_score = max(score)
)그룹을 인식하는 mutate()
group_by() 다음에 사용하는 mutate()는 각 그룹 내에서 값을 계산하면서 모든 행을 유지합니다(summarize()와 다릅니다). 각 행에 그룹 수준의 지표를 추가하고 싶을 때 적합합니다.
library(dplyr)
sales <- data.frame(
region = c('East','East','West','West','West'),
rep = c('Alice','Bob','Carol','Dave','Eve'),
revenue = c(150, 200, 120, 180, 160)
)
sales %>%
group_by(region) %>%
mutate(
region_total = sum(revenue),
pct_of_region = round(100 * revenue / sum(revenue), 1)
) %>%
ungroup()그룹 내에서 필터링하기
group_by() 다음에 사용하는 filter()는 그룹 수준의 조건을 기준으로 행을 필터링합니다. 예를 들어 지역별 최고 성과자만 남기거나, 값이 그룹 평균을 초과하는 행만 남길 수 있습니다.
library(dplyr)
sales <- data.frame(
region = c('East','East','West','West','North','North'),
rep = c('Alice','Bob','Carol','Dave','Eve','Frank'),
revenue = c(150, 200, 120, 180, 95, 130)
)
# Keep the top rep per region
sales %>%
group_by(region) %>%
filter(revenue == max(revenue)) %>%
ungroup()빠른 확인
summarize()에서 .groups = 'drop' 인수는 어떤 작업을 수행합니까?
복습: 그룹화된 요약
그룹화된 요약의 핵심 내용:
group_by(col)는 그룹화를 추가합니다. 데이터는 변경되지 않지만 작업이 그룹을 인식하게 됩니다summarize()는 각 그룹을 하나의 행으로 축약합니다.n(),mean(),sum()등을 사용합니다.groups = 'drop'은 결과가 그룹화되지 않도록 합니다ungroup()은 언제든지 그룹화를 제거합니다group_keys()는 그룹 수준을 살펴보고,n_groups()는 그룹 수를 셉니다mutate()와group_by()를 함께 사용하면 행을 축약하지 않고 그룹 수준 열을 추가할 수 있습니다
library(dplyr)
# Full pipeline example
data.frame(
dept = c('Eng','Eng','HR','HR','Sales'),
salary = c(95000, 110000, 60000, 65000, 75000)
) %>%
group_by(dept) %>%
summarize(
headcount = n(),
avg_salary = mean(salary),
.groups = 'drop'
) %>%
arrange(desc(avg_salary))자주 묻는 질문
“그룹별 요약과 group_by()” 강의는 무료인가요?
네 — “그룹별 요약과 group_by()” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 R Academy 강의 전체를 잠금 해제할 수 있습니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“그룹별 요약과 group_by()”에서 뭘 배우나요?
그룹별로 데이터를 집계하고 그룹별 통계를 계산합니다. 브라우저에서 직접 실행하는 실습 코드로 R Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
R Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 R Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“그룹별 요약과 group_by()” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 R Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 R Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 그룹별 요약과 group_by()
- 윈도 함수: lag, lead, cumsum
- dplyr의 다중 테이블 조인
- 정돈된 평가: {{ }} 및 .data