使用给定日期和时间

时间:2016-03-08 05:16:54

标签: r dataframe

我想创建一个数据框,其第一列为Date,第二列为Time。条件是时间应该在30分钟的间隔和相应的日期增加。稍后我将手动添加其他列。

> df
Date          Time
2012-01-01    00:00:00
2012-01-01    00:30:00
2012-01-01    01:00:00
2012-01-01    01:30:00
..........    ........
..........    ........
and so on...

修改

也可以用其他方式完成。

可以使用给定的日期和时间创建单个列,然后使用tidyr或任何其他包进行分隔。

> df
DateTime
2012-01-01 00:00:00
2012-01-01 00:30:00
2012-01-01 01:00:00
2012-01-01 01:30:00
.......... 
.......... 
and so on...

任何帮助将不胜感激。先感谢您。

1 个答案:

答案 0 :(得分:2)

您可以使用seq生成序列,指定开始和结束日期以及时间间隔

df <- data.frame(DateTime = seq(as.POSIXct("2012-01-01"),
                                as.POSIXct("2012-02-01"), 
                                by=(30*60)))
head(df)
             DateTime
1 2012-01-01 00:00:00
2 2012-01-01 00:30:00
3 2012-01-01 01:00:00
4 2012-01-01 01:30:00
5 2012-01-01 02:00:00
6 2012-01-01 02:30:00

要将它们分成两个单独的列,我们可以使用?strftime

date_seq <- seq(as.POSIXct("2012-01-01"), 
                as.POSIXct("2012-02-01"), 
                by=(30*60))

df <- data.frame(Date = strftime(date_seq, format="%Y-%m-%d"),
                 Time = strftime(date_seq, format="%H:%M:%S"))

        Date     Time
1 2012-01-01 00:00:00
2 2012-01-01 00:00:30
3 2012-01-01 00:01:00
4 2012-01-01 00:01:30
5 2012-01-01 00:02:00
6 2012-01-01 00:02:30

<强>更新

您也可以包含time日期时间的POSIXct部分。这将使您更好地控制您的上部和上部。下界:

date_seq <- seq(as.POSIXct("2012-01-01 00:00:00"), 
                as.POSIXct("2012-02-02 23:30:00"), 
                by=(30*60))

df <- data.frame(Date = strftime(date_seq, format="%Y-%m-%d"),
                 Time = strftime(date_seq, format="%H:%M:%S"))