data.table 年月争论

问题描述 投票:0回答:1

给出以下年龄界限(以年为单位):

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
r data.table data-wrangling
1个回答
0
投票

这个?

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
© www.soinside.com 2019 - 2024. All rights reserved.