基于最大值条件在R中修正错误年龄数据的方法求助
修正年龄计算的解决方案
你的核心问题是没利用年份差来计算真实年龄——原数据里每个分组的age都是最后记录年份的正确年龄,所以只需要基于每个分组的最大年份,用「最终年龄 - (最终年份 - 当前年份)」就能得到对应年份的真实年龄。
修正后的dplyr代码
library(dplyr) new_data = problem_data %>% group_by(name) %>% mutate( max_year = max(year), # 获取每个用户的最后记录年份 real_age = age - (max_year - year) # 用最终年龄减去年份差 ) %>% ungroup() %>% # 可选,取消分组 select(-max_year) # 移除中间变量
运行结果
name year age real_age 1 john 2010 21 16 2 john 2011 21 17 3 john 2015 21 21 4 alex 2014 55 53 5 alex 2016 55 55 6 peter 2010 61 58 7 peter 2011 61 59 8 peter 2012 61 60 9 peter 2013 61 61
原代码无效的原因
你之前的代码用age - lag(age),但每个用户的age列值完全相同,所以差值必然是0,根本没用到年份的关键信息。我们需要的是基于年份差的计算,而非同一列的前后行差值。
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

