展开 data.table 中的日期

bub*_*itz 4 r data.table

我目前有一个问题,我有一个包含开始和结束日期以及 ID 的数据表。新表应该具有相同的 ID 和一列日期,包含第一天和最后一天之间的一系列天数,每行一天,即

old.table
ID          first.date               last.date
1           2001-01-01               2001-01-03
2           2002-02-01               2002-02-04

new table
ID          date
1           2001-01-01
1           2001-01-02
1           2001-01-03
2           2002-02-01
2           2002-02-02
2           2002-02-03
2           2002-02-04
Run Code Online (Sandbox Code Playgroud)

我知道,那个呼唤

seq(first.date,last.date,"day")
Run Code Online (Sandbox Code Playgroud)

创建这样一个序列。然而,调用

old.table[,date := seq(first.date,last.date,"day")])
Run Code Online (Sandbox Code Playgroud)

抛出异常

 Error in seq.Date(first.date, last.date, "day") : 
'from' must be of length 1 
Run Code Online (Sandbox Code Playgroud)

这意味着,不可能对输入进行矢量化(至少不是这样)。

有没有办法获得所需的解决方案?

akr*_*run 5

由于and 中seq只需要一个元素,我们可以按 'id' 分组(如果没有重复项),然后执行fromtoseq

setDT(old.table)[, .(date = seq(first.date, last.date, by = '1 day')), by = ID]  
#   ID       date
#1:  1 2001-01-01
#2:  1 2001-01-02
#3:  1 2001-01-03
#4:  2 2002-02-01
#5:  2 2002-02-02
#6:  2 2002-02-03
#7:  2 2002-02-04
Run Code Online (Sandbox Code Playgroud)

如果“ID”也重复,则按行顺序分组

setDT(old.table)[, .(date = seq(first.date, last.date, by = '1 day')), 
                        by = .(ID, ID2 = seq_len(nrow(old.table)))]  
Run Code Online (Sandbox Code Playgroud)