0Pricing
R Academy · 강의

윈도 함수: lag, lead, cumsum

그룹 내에서 누적 합계, 오프셋, 누적 집계를 계산합니다.

윈도 함수: lag, lead, cumsum은(는) CoddyKit의 무료 R Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 R Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

윈도 함수란 무엇인가요?

윈도 함수는 데이터를 축약하지 않고 현재 행을 기준으로 값을 계산합니다. summarize()와 달리 모든 행을 유지합니다. dplyr에서는 윈도 함수를 mutate() 안에서 사용하며, group_by() 다음에 사용하는 경우가 많습니다.

library(dplyr)

# Monthly revenue — we want to compare each month to previous
df <- data.frame(
  month = 1:6,
  revenue = c(100, 120, 95, 140, 160, 130)
)
print(df)

lag() — 이전 행의 값

lag(x, n=1)은 현재 행보다 n개 앞선 행의 값을 반환합니다. 첫 번째 행(들)은 NA가 됩니다. 기간별 변화를 계산할 때 적합합니다.

library(dplyr)

df <- data.frame(
  month = 1:6,
  revenue = c(100, 120, 95, 140, 160, 130)
)

df %>%
  mutate(
    prev_revenue = lag(revenue),
    change = revenue - lag(revenue),
    pct_change = round(100 * (revenue - lag(revenue)) / lag(revenue), 1)
  )

lead() — 다음 행의 값

lead(x, n=1)은 현재 행보다 n개 뒤의 행에 있는 값을 반환합니다. 마지막 행(들)은 NA가 됩니다. 현재 값과 미래 값을 비교할 때 유용합니다.

library(dplyr)

df <- data.frame(
  month = 1:5,
  revenue = c(100, 120, 95, 140, 160)
)

df %>%
  mutate(
    next_month = lead(revenue),
    next_2_months = lead(revenue, n = 2),
    will_increase = revenue < lead(revenue)
  )

cumsum()과 cumprod()

cumsum(x)은 누적 합계(누적 합)를 계산합니다. cumprod(x)는 누적 곱을 계산합니다. 둘 다 mutate() 안에서 원활하게 사용할 수 있는 R 기본 함수입니다.

library(dplyr)

df <- data.frame(
  month = 1:6,
  revenue = c(100, 120, 95, 140, 160, 130)
)

df %>%
  mutate(
    running_total = cumsum(revenue),
    growth_factor = round(cumprod(1 + (revenue - 100) / 100), 3)
  )

cummax()와 cummin()

cummax(x)는 지금까지 본 값 중 가장 큰 값인 누적 최댓값을 추적합니다. cummin(x)은 누적 최솟값을 추적합니다. 역대 최고점과 최저점을 추적하거나 하락 폭을 분석할 때 유용합니다.

library(dplyr)

df <- data.frame(
  day = 1:7,
  price = c(50, 52, 48, 55, 53, 58, 56)
)

df %>%
  mutate(
    all_time_high = cummax(price),
    all_time_low = cummin(price),
    drawdown_from_high = price - cummax(price)
  )

row_number() 순위 매기기

row_number()는 각 행에 정수 순위를 할당합니다. group_by() 다음에 사용하면 각 그룹 내에서 순위를 매깁니다. 동률인 값에는 나타난 순서에 따라 연속된 순위가 부여됩니다.

library(dplyr)

sales <- data.frame(
  region = c('East','East','East','West','West','West'),
  rep = c('Alice','Bob','Carol','Dave','Eve','Frank'),
  revenue = c(200, 150, 180, 120, 190, 160)
)

sales %>%
  group_by(region) %>%
  mutate(rank = row_number(desc(revenue))) %>%
  arrange(region, rank)

ntile() — 그룹으로 구간 나누기

ntile(x, n)은 데이터를 크기가 대략 같은 n개의 구간으로 나누고 구간 번호를 반환합니다(1 = 최솟값 쪽). 사분위수, 십분위수 또는 백분위 그룹을 만들 때 유용합니다.

library(dplyr)

df <- data.frame(
  customer = paste0('C', 1:10),
  spend = c(50, 200, 75, 300, 125, 450, 25, 175, 100, 350)
)

df %>%
  mutate(
    quartile = ntile(spend, 4),
    decile = ntile(spend, 10)
  ) %>%
  arrange(spend)

percent_rank() — 상대적 위치

percent_rank(x)는 각 값의 순위를 0과 1 사이의 비율로 반환합니다. 최솟값은 0, 최댓값은 1이 됩니다. 어떤 값이 다른 모든 값에 비해 어디에 위치하는지 알려 줍니다.

library(dplyr)

df <- data.frame(
  student = c('Alice','Bob','Carol','Dave','Eve'),
  score = c(85, 92, 78, 95, 88)
)

df %>%
  mutate(
    pct_rank = round(percent_rank(score), 3),
    top_pct = round(1 - percent_rank(score), 3)
  ) %>%
  arrange(desc(score))

그룹에서 윈도 함수 사용하기

모든 윈도 함수는 group_by()와 함께 사용하면 그룹을 인식하게 됩니다. 각 그룹은 독립적인 윈도를 가지므로 lag와 lead는 그룹 경계를 넘지 않고, cumsum은 그룹마다 재설정되며, 순위는 그룹 내에서 매겨집니다.

library(dplyr)

df <- data.frame(
  product = c('A','A','A','B','B','B'),
  month = c(1,2,3,1,2,3),
  sales = c(100, 120, 110, 200, 180, 220)
)

df %>%
  group_by(product) %>%
  mutate(
    mom_change = sales - lag(sales),
    cumulative = cumsum(sales),
    rank_in_product = row_number(sales)
  )

여러 윈도 함수 결합하기

하나의 mutate() 호출에서 여러 윈도 함수를 연속으로 사용하여 분석에 유용한 열을 만들 수 있습니다. 이렇게 하면 데이터 처리 흐름을 읽기 쉽게 유지하고 group_by()를 반복해서 호출하지 않아도 됩니다.

library(dplyr)

stock <- data.frame(
  date = as.Date(c('2024-01-01','2024-01-02','2024-01-03',
                   '2024-01-04','2024-01-05')),
  close = c(150.2, 152.8, 149.5, 155.1, 157.3)
)

stock %>%
  mutate(
    prev_close = lag(close),
    daily_return = round((close / lag(close) - 1) * 100, 2),
    running_high = cummax(close),
    distance_from_high = round(close - cummax(close), 2)
  )

default 인수를 사용한 lag()

lag(x, n=1, default=NA)는 초기 NA 위치를 채울 default 값을 받습니다. 계산된 열에서 결측값 대신 숫자 기준값이 필요할 때 유용합니다.

library(dplyr)

df <- data.frame(
  week = 1:5,
  visitors = c(500, 620, 480, 700, 650)
)

df %>%
  mutate(
    prev_week = lag(visitors, default = 0),
    growth = visitors - lag(visitors, default = visitors[1])
  )

빠른 확인

x의 최솟값에 대해 ntile(x, 4)는 무엇을 반환합니까?

복습: 윈도 함수

dplyr의 윈도 함수 핵심 내용:

  • lag(x, n) — 현재 행보다 n개 앞선 행의 값, lead(x, n) — n개 뒤의 행의 값
  • cumsum() — 누적 합계, cumprod() — 누적 곱
  • cummax() / cummin() — 누적 최댓값 / 최솟값
  • row_number() — 그룹 내 정수 순위
  • ntile(x, n) — n개 그룹으로 구간 나누기(1=최솟값 쪽, n=최댓값 쪽)
  • percent_rank(x) — 0과 1 사이의 비율 순위
  • 모든 윈도 함수는 group_by()와 함께 사용하면 그룹을 인식합니다
library(dplyr)

# Comprehensive window function example
data.frame(
  region = c('East','East','East','West','West','West'),
  month = c(1,2,3,1,2,3),
  sales = c(100, 130, 120, 200, 190, 210)
) %>%
  group_by(region) %>%
  mutate(
    mom_chg = sales - lag(sales),
    running_total = cumsum(sales),
    rank = row_number(desc(sales))
  ) %>%
  ungroup()

자주 묻는 질문

“윈도 함수: lag, lead, cumsum” 강의는 무료인가요?

네 — “윈도 함수: lag, lead, cumsum” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 R Academy 강의 전체를 잠금 해제할 수 있습니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“윈도 함수: lag, lead, cumsum”에서 뭘 배우나요?

그룹 내에서 누적 합계, 오프셋, 누적 집계를 계산합니다. 브라우저에서 직접 실행하는 실습 코드로 R Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

R Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 R Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“윈도 함수: lag, lead, cumsum” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 R Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 R Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 그룹별 요약과 group_by()
  2. 윈도 함수: lag, lead, cumsum
  3. dplyr의 다중 테이블 조인
  4. 정돈된 평가: {{ }} 및 .data
← R Academy(으)로 돌아가기