R序列的日期和向量

时间:2015-08-12 12:51:10

标签: r date

我希望恢复两个向量的第一个日期和相同向量的第二个日期之间的日期序列,....

以下是一个例子:

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'

最好的方法是什么?

2 个答案:

答案 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"