基于给定年龄上下限,如何简洁优雅生成指定data.table?
简洁生成目标data.table的方法
可以通过将年月转换为数值序列的方式,用核心代码快速完成需求,具体步骤如下:
步骤1:计算起始和结束的年月基准值
先把以年为单位的上下限,转换为「年份×12 + 月份」的整数形式,这样能借助整数序列生成连续的年月区间:
library(data.table) from_i <- 20.2345 to_i <- 22.0000009 # 提取整数年份,将小数部分转换为月份(四舍五入) y1 <- trunc(from_i) m1 <- round((from_i - y1)*12, 0) y2 <- trunc(to_i) m2 <- round((to_i - y2)*12, 0) # 转换为可生成连续序列的基准数值 start_num <- y1 * 12 + m1 end_num <- y2 * 12 + m2
步骤2:生成目标data.table
通过整数序列拆分回年份和月份,直接构造符合要求的data.table:
dt_1 <- data.table( Year = (start_num:end_num) %/% 12, Month = (start_num:end_num) %% 12 )
验证结果
运行后输出的dt_1与示例完全一致:
Year Month 1: 20 3 2: 20 4 3: 20 5 4: 20 6 5: 20 7 6: 20 8 7: 20 9 8: 20 10 9: 20 11 10: 21 0 11: 21 1 12: 21 2 13: 21 3 14: 21 4 15: 21 5 16: 21 6 17: 21 7 18: 21 8 19: 21 9 20: 21 10 21: 21 11 22: 22 0
这种方法用整数运算替代循环,代码简洁高效,完全契合data.table的风格。
内容的提问来源于stack exchange,提问作者highbury
相关产品推荐
相关产品推荐

