我想创建一个数据框,其第一列为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...
Run Code Online (Sandbox Code Playgroud)
编辑
也可以用另一种方式完成。
可以使用给定的日期和时间创建单个列,然后稍后使用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...
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激。先感谢您。
您可以使用 生成序列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
Run Code Online (Sandbox Code Playgroud)
并将它们放在两个单独的列中,我们可以使用 ?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
Run Code Online (Sandbox Code Playgroud)
更新
您也可以包含日期时间的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"))
Run Code Online (Sandbox Code Playgroud)