在R中按id_municipio和ano分组累加生成面板数据的问题
问题原因
你的代码错误在于分组时同时包含了ano:每个id_municipio与ano的组合都是唯一的单行数据,分组后每组仅一条记录,cumsum无法产生累加效果,最终结果自然和原数据集一致。
正确代码
只需按id_municipio单独分组,先按年份排序保证时间顺序,再对目标列执行累加操作:
teste_3 <- teste_2 %>% group_by(id_municipio) %>% arrange(ano, .by_group = TRUE) %>% mutate( across(c(CLARO, OI, TIM, VIVO), cumsum) ) %>% ungroup() # 可选,根据后续操作需求决定是否取消分组
代码说明
group_by(id_municipio):仅按城市ID分组,确保同一城市的所有年份数据在同一组内进行累加计算arrange(ano, .by_group = TRUE):按年份排序,.by_group参数保证分组内的排序逻辑生效across(...):批量处理多列,替代逐个列写cumsum的冗余写法,效果完全一致ungroup():如果后续无需分组操作,建议取消分组,避免对后续代码造成意外影响
运行后即可得到你需要的累加面板数据。
内容的提问来源于stack exchange,提问作者Mateus Maciel
相关产品推荐
相关产品推荐

