如何在R语言面板数据中按组计算累积最大值
问题描述
我有一个包含数千条观测的面板数据集,简化示例如下:
library(dplyr) x1 = c(NA,NA,NA,5.1,5.0,5.4,5.15,4.9,5,6) x2 = c(5.9,5.85,5.8,6,5.95,5.98,5.99,6.1,6.15,6.14) df = data.frame(countrycode = c(replicate(10,"ITA"), replicate(10,"UK")), year = c(replicate(2,2010:2019)), LogGdp = c(x1,x2))
我需要按countrycode分组,对LogGdp变量计算累积最大值(即出现新最大值时更新,否则保持之前的最大值),最终要得到包含record列的结果,示例如下:
z1 = c(NA,NA,NA,5.1,5.1,5.4,5.4,5.4,5.4,6) z2 = c(5.9,5.9,5.9,6,6,6,6,6.1,6.15,6.15) df = data.frame(countrycode = c(replicate(10,"ITA"), replicate(10,"UK")), year = c(replicate(2,2010:2019)), LogGdp = c(x1,x2), record = c(z1,z2))
我尝试的代码如下:
df %>% group_by(countrycode) %>% mutate(record = cummax(LogGdp))
解决方案
你的代码完全符合需求,运行后就能得到目标中的record列。
结果验证
执行你的代码后,查看完整输出:
df %>% group_by(countrycode) %>% mutate(record = cummax(LogGdp)) %>% print(n=20)
输出结果会和你提供的示例完全一致:
ITA组:前三个NA保持不变,从第4行的5.1开始,后续未出现更大值时record维持当前最大值,直到最后一行的6更新为新最大值;UK组:第一行的5.9作为初始最大值,后续遇到6、6.1、6.15时依次更新最大值,其余行保持当前最大值。
效率说明
cummax()是R内置的向量化函数,搭配dplyr的分组操作,处理数千条观测的面板数据效率很高,无需额外优化。
内容的提问来源于stack exchange,提问作者Maximilian
相关产品推荐
相关产品推荐

