我希望恢复两个向量的第一个日期和相同向量的第二个日期之间的日期序列,....
以下是一个例子:
dates1 = as.Date(c('2015-10-01', '2015-03-27', '2015-05-20'))
dates2 = as.Date(c('2015-10-03', '2015-03-28', '2015-05-22'))
我想恢复这个
'2015-10-01', '2015-10-02', '2015-10-03', '2015-03-27' '2015-03-28',
'2015-05-20' '2015-05-21' '2015-05-22'
最好的方法是什么?
答案 0 :(得分:3)
我们可以使用Map
遍历start
('dates1')和end
日期('dates2')的相应元素,使用seq
,{{ 1}} unlist
输出以获得list
个日期。
vector
我们可以使用lst <- Map(seq, dates1, dates2, MoreArgs=list(by='1 day'))
as.Date(unlist(lst), origin='1970-01-01')
#[1] "2015-10-01" "2015-10-02" "2015-10-03" "2015-03-27" "2015-03-28"
#[6] "2015-05-20" "2015-05-21" "2015-05-22"
作为评论中提到的@bgoldst,而不是unlist
,以避免将日期强制为“数字”值
do.call(c
或者另一种选择是使用 do.call('c', lst)
#[1] "2015-10-01" "2015-10-02" "2015-10-03" "2015-03-27" "2015-03-28"
#[6] "2015-05-20" "2015-05-21" "2015-05-22"
我们创建一个data.table,其中'dates1'和'dates2'作为列,使用data.table
作为分组变量,我们得到日期序列在'dates1'和'dates2'之间,并提取'V1'列以获得日期向量。
row number
答案 1 :(得分:2)
akrun的解决方案非常好(+1),但只是为了变化,这里有一种替代方法,您可以使用一些加法,减法,rep()
和sequence()
:
lengths <- dates2-dates1+1;
rep(dates1,lengths)+sequence(lengths)-1;
## [1] "2015-10-01" "2015-10-02" "2015-10-03" "2015-03-27" "2015-03-28" "2015-05-20" "2015-05-21" "2015-05-22"