给出以下年龄界限(以年为单位):
from_i <- 20.2345
to_i <- 22.0000009
这是生成以下 data.table 的紧凑而优雅的方式吗?
from_i_integer <- trunc(from_i)
from_i_month <- round((from_i-from_i_integer)*12,0)
to_i_integer <- trunc(to_i)
to_i_month <- round((to_i-to_i_integer)*12,0)
### TBD...
Year <- c(20,20,20,20,20,20,20,20,20,
21,21,21,21,21,21,21,21,21,21,21,21,
22)
Month <- c(3,4,5,6,7,8,9,10,11,
0,1,2,3,4,5,6,7,8,9,10,11,
0)
dt_1 <- data.table(Year, Month)
dt_1
这个?
library(data.table)
dat <- data.table(Year = seq(floor(from_i), ceiling(to_i), by = 1/12))
dat[between(Year, from_i, to_i),
][, c("Year", "Month") := .(trunc(Year), round(Year %% 1 * 12))]
# Year Month
# <num> <num>
# 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
# ---
# 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