portfolios <- sorting_variables |>
group_by(sorting_date) |>
mutate(
portfolio_size = assign_portfolio(
data = pick(everything()),
sorting_variable = size,
percentiles = c(0, 0.5, 1)
)) |>
group_by(sorting_date, portfolio_size) |>
mutate(
across(c(bm, op, inv), ~assign_portfolio(
data = pick(everything()),
sorting_variable = .,
percentiles = c(0, 0.3, 0.7, 1)),
.names = "portfolio_{.col}"
)
) |>
ungroup() |>
select(permno, sorting_date,
portfolio_size, portfolio_bm,
portfolio_op, portfolio_inv)
portfolios <- crsp_monthly |>
mutate(sorting_date = case_when(
month(date) <= 6 ~ ymd(str_c(year(date) - 1, "0701")),
month(date) >= 7 ~ ymd(str_c(year(date), "0701"))
)) |>
inner_join(portfolios, join_by(permno, sorting_date))