R语言按person分组滞后car列生成上一年车辆字段
错误原因
原有代码对car列做全局滞后计算,没有按person字段拆分计算边界,人员切换时会把上一位人员最后一年的车辆值错误赋值给下一位人员的首年记录,无法在新人员首行自动返回NA。
正确实现代码
dplyr 实现(推荐)
计算前先按人员分组、同组内按年份升序排列,再取滞后值,从根源避免顺序错乱、跨组取值错误的问题:
library(dplyr) car <- car %>% group_by(person) %>% arrange(year, .by_group = TRUE) %>% mutate(previous_year_car = lag(car)) %>% ungroup()
- 说明:
lag()默认取列的上一位值,分组后每组首行自动返回NA,完全匹配需求;.by_group = TRUE保证排序仅在组内按年份执行,不会打乱人员分组结构;最后执行ungroup()清除分组属性,避免后续数据操作受残留分组影响。如果原始数据已经满足「每个人员的记录按年份从小到大排列」的要求,可以省略arrange步骤,不过建议保留,容错性更高。
base R 实现
不需要加载第三方包的原生写法:
# 先按人员、年份升序排序,保证取值顺序正确 car <- car[order(car$person, car$year), ] # 按person分组计算滞后值 car$previous_year_car <- ave( car$car, car$person, FUN = function(x) c(NA, head(x, -1)) )
内容的提问来源于stack exchange,提问作者maesteri
相关产品推荐
相关产品推荐

