如何在R中生成具有特定开始日期/时间的日期和时间序列

时间:2018-10-02 03:23:07

标签: r date dplyr lubridate posixct

我希望生成或完成一列日期和时间。我有一个包含四个数字列和一个POSIXct时间列的数据框,如下所示:

    CH_1   CH_2  CH_3  CH_4           date_time
1 -10096 -11940 -9340 -9972 2018-07-24 10:45:01
2 -10088 -11964 -9348 -9960                <NA>
3 -10084 -11940 -9332 -9956                <NA>
4 -10088 -11956 -9340 -9960                <NA>
5 -10084 -11944 -9332 -9976                <NA>
6 -10076 -11940 -9340 -9948                <NA>
7 -10088 -11956 -9352 -9960                <NA>
8 -10084 -11944 -9348 -9980                <NA>
9 -10076 -11964 -9348 -9976                <NA>
0 -10076 -11956 -9348 -9964                <NA>

我想为date_time列顺序生成日期和时间,增加 1秒,直到填充数据框。 (即下一个日期/时间应为2018-07-24 10:45: 02 )。这意味着可以对多个数据集进行重现,并且并不总是知道需要填充的行数,但是开始日期/时间将始终存在于该第一个单元格中。

我知道解决方案很可能在seq.Date(或类似日期)之内,但是我遇到的问题是我并不总是知道结束日期/时间,这是我发现的大多数示例所需要的。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

无需润滑,只需R代码:

x <- data.frame(date = c(as.POSIXct("2018-01-01 00:00:00"), rep(NA,10)))
startDate <- x[["date"]][1]
x[["date2"]] <- startDate + (seq_len(nrow(x)) - 1)
x
#         date               date2
# 1  2018-01-01 2018-01-01 00:00:00
# 2        <NA> 2018-01-01 00:00:01
# 3        <NA> 2018-01-01 00:00:02
# 4        <NA> 2018-01-01 00:00:03
# 5        <NA> 2018-01-01 00:00:04
# 6        <NA> 2018-01-01 00:00:05
# 7        <NA> 2018-01-01 00:00:06
# 8        <NA> 2018-01-01 00:00:07
# 9        <NA> 2018-01-01 00:00:08
# 10       <NA> 2018-01-01 00:00:09
# 11       <NA> 2018-01-01 00:00:10

答案 1 :(得分:0)

使用Zygmunt Zawadzki的示例数据,这是一个tidyverse解决方案:

library(lubridate)
library(tidyverse)

df %>% mutate(date_time = date_time[1] + seconds(row_number()-1)) 

输出:

             date_time
1  2018-01-01 00:00:00
2  2018-01-01 00:00:01
3  2018-01-01 00:00:02
4  2018-01-01 00:00:03
5  2018-01-01 00:00:04
6  2018-01-01 00:00:05
7  2018-01-01 00:00:06
8  2018-01-01 00:00:07
9  2018-01-01 00:00:08
10 2018-01-01 00:00:09
11 2018-01-01 00:00:10

数据:

df <- data.frame(date_time = c(as.POSIXct("2018-01-01 00:00:00"), rep(NA,10)))