R
Beginner
1 min read
Window Functions, Rowwise Operations, and tidyr
Example
library(dplyr)
library(tidyr)
sales <- data.frame(
month = rep(c("Jan","Feb","Mar","Apr"), times = 2),
region = rep(c("North","South"), each = 4),
revenue = c(120,135,110,150, 90,95,105,115)
)
# Window functions inside mutate after group_by
sales |>
group_by(region) |>
mutate(
rank_rev = row_number(desc(revenue)),
pct_of_max = revenue / max(revenue),
cumulative = cumsum(revenue),
mom_change = revenue - lag(revenue, default = first(revenue))
) |>
ungroup()
# rowwise() for row-level computation
scores <- data.frame(
student = c("Alice","Bob","Carol"),
math = c(88, 72, 95),
english = c(91, 85, 78),
science = c(79, 90, 88)
)
scores |>
rowwise() |>
mutate(
avg_score = mean(c_across(math:science)),
max_score = max(c_across(math:science))
) |>
ungroup()
# pivot_longer — wide to long
long_sales <- sales |>
rename(rev = revenue) |>
pivot_longer(cols = rev, names_to = "metric", values_to = "value")
# More typical pivot_longer: multiple measure columns
scores_long <- scores |>
pivot_longer(cols = -student,
names_to = "subject",
values_to = "score")
scores_long
# pivot_wider — long back to wide
scores_long |>
pivot_wider(names_from = subject,
values_from = score)
# separate and unite
data.frame(date_range = c("2024-01-01/2024-03-31",
"2024-04-01/2024-06-30")) |>
separate(date_range, into = c("start", "end"), sep = "/")
scores |>
unite("id", student, sep = "_") |>
head(2)