如何用dplyr原生管道对非分组变量批量计算累加和?
自动处理非分组变量的累加和实现方案
直接给你可用的两种实现代码:
写法一:固定排除指定列
df |> group_by(id) |> arrange(x, .by_group = TRUE) |> mutate(across(-c(id, x), cumsum))
写法二:适配动态分组的通用写法
如果后续分组变量有调整,不用手动修改排除列,用group_cols()自动识别分组变量:
df |> group_by(id) |> arrange(x, .by_group = TRUE) |> mutate(across(-c(group_cols(), x), cumsum))
关键细节说明:
arrange的.by_group参数:分组后排序时加上这个参数,能确保是在每个分组内部按x排序,避免全局排序打乱分组结构。across的列选择逻辑:-c(id, x)表示排除分组变量id和不需要累加的排序变量x,剩下的y、z会被自动选中计算累加和;group_cols()是dplyr内置函数,能自动识别当前所有分组变量,适合分组列可能变动的场景,更灵活。
你之前尝试代码的问题:
mutate(across(everything()), cumsum)会把id、x都纳入计算,不符合需求;all_vars()和any_vars()是dplyr旧版语法,现在已经被across替代,所以无法生效。
内容的提问来源于stack exchange,提问作者Doug Fir
相关产品推荐
相关产品推荐

