如何在R语言中为2005-2019数据集创建4/5年时间区间分组
解决时间区间分组问题
5年区间分组
你的5年区间代码其实是有效的,因为2005恰好是5的整数倍,Year %/% 5会把2005-2009年都归为401,乘以5后得到2005;2010-2014年归为402,乘以5得到2010,正好匹配你想要的[2005,2010,2015]区间。如果要更通用的写法(比如起始年份不是区间长度倍数时也适用),可以用偏移量计算:
library(dplyr) # 5年区间通用写法 my_data <- my_data %>% mutate(period = 2005 + 5 * ((Year - 2005) %/% 5))
4年区间分组
你遇到的2004年问题,是因为Year %/% 4会把2005年归为501(4*501=2004),不符合你要的起始于2005的区间。用偏移量调整就能解决,计算年份与2005的差值,再按4年分组后加回2005:
# 4年区间分组(匹配[2005,2009,2013,2017]) my_data <- my_data %>% mutate(period = 2005 + 4 * ((Year - 2005) %/% 4))
测试这个逻辑:
- 2005-2008年:
(Year-2005)在0-3之间,%/%4结果为0,period=2005 - 2009-2012年:差值4-7,
%/%4结果为1,period=2009 - 2013-2016年:差值8-11,
%/%4结果为2,period=2013 - 2017-2019年:差值12-14,
%/%4结果为3,period=2017
完全符合你的需求,不会出现原数据中不存在的年份。
分组后的数据处理
分组后如果需要对其他变量(xx、yy等)进行聚合,要根据变量类型选择合适的函数,比如数值型变量用sum()、mean(),分类变量用first()、last()或者按规则合并:
# 按period和Country分组,计算xx的均值、yy的总和 my_data_summary <- my_data %>% group_by(Country, period) %>% summarise( avg_xx = mean(xx, na.rm = TRUE), total_yy = sum(yy, na.rm = TRUE), .groups = "drop" )
内容的提问来源于stack exchange,提问作者Lex
相关产品推荐
相关产品推荐

