用seq和lubridate创建时间序列

时间:2017-06-07 07:03:18

标签: r

嗨我有一个包含所有字符数据类型的数据集

col1        min_date        max_date
Minutes     2016-06-01    2016-06-27 11:15:00
15_minutes  2016-06-01    2016-06-27 11:15:00

现在我尝试根据“col1”中的值制作时间序列 分钟:

time_index <- seq(from = ymd(df$min_date), 
                  to = ymd_hms(df$max_date), by = "minute")

持续15分钟:

time_index <- seq(from = ymd(df$min_date), 
                  to = ymd_hms(df$max_date), by = "15 minute")

然后我收到错误

  

seq.Date中的错误(from = ymd(df $ min_date),                     to = ymd_hms(df $ max_date),by =“minute”,:     'from'必须长度为1

我们如何解决,提前谢谢

1 个答案:

答案 0 :(得分:0)

我们可以使用Map执行此操作,因为seq未进行矢量化以获取多个日期范围。使用Map,我们将输入参数指定为数据集列,其顺序与fromtoby相同,并应用seq。 &#39; col1&#39;子字符串用于by参数

df1$col1 <-  sub("utes", "", sub("_", " ", tolower(df1$col1)))

lst <- Map(seq, as.POSIXct(df1$min_date), 
        as.POSIXct(df1$max_date), df1$col1)
lapply(lst, head, 2)
#[[1]]
#[1] "2016-06-01 00:00:00 IST" "2016-06-01 00:01:00 IST"

#[[2]]
#[1] "2016-06-01 00:00:00 IST" "2016-06-01 00:15:00 IST"