在data.table中展开日期

时间:2017-04-30 13:07:14

标签: 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

我知道,那叫

seq(first.date,last.date,"day")

创建这样的序列。但是,请致电

old.table[,date := seq(first.date,last.date,"day")])

抛出异常

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

意思是,无法对输入进行矢量化(至少不是这样)。

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

1 个答案:

答案 0 :(得分:4)

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

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

如果'ID'也重复,则按行序列分组

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