我想恢复两个向量的第一个日期和相同向量的第二个日期之间的日期序列,....
这是一个例子:
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'
最好的方法是什么?
最佳答案
我们可以使用 Map
来循环遍历 start
('dates1') 和 end
dates ('dates2') 对应的元素,使用 seq
、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"
我们可以使用 do.call(c
而不是 unlist
,正如评论中提到的 @bgoldst 避免将日期强制转换为“数字”值
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' 列以获得日期向量。
library(data.table)
DT <- data.table(dates1, dates2)
DT[,seq(dates1, dates2, by= '1 day') , by = 1:nrow(DT)]$V1
#[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"
关于日期和向量的 R 序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31965777/