我想创建一个如下所示的数据框:
Date Time
------- -------
02/01/2016 14:00
02/01/2016 14:01
02/01/2016 14:02
我有一个数据集,从2016年2月1日14:00开始,但我只需要它从那里开始,并在数据集有时间戳数据的地方和它没有的地方之间创建空行。吨。对于上下文,这就是时间戳数据集的样子:
cost date time
----- ----- -----
$300 02/01/2016 14:00
$120 02/01/2016 14:03
我希望我的最终结果数据框看起来像这样:
Date Time Cost
------- ------- ------
02/01/2016 14:00 $300
02/01/2016 14:01
02/01/2016 14:02
02/01/2016 14:03 $120
02/01/2016 14:04
谢谢!
答案 0 :(得分:2)
查找函数seq.POSIXt。此功能旨在创建时间序列。对于你的问题:
seq(ISOdate(2016,2,02, 14, 00, 00), by = "min", length.out = 5)
可以选择指定开始和停止间隔。如果你打算多次工作,我建议研究strptime函数和POSIXt时间类。
答案 1 :(得分:2)
这是一个可以帮助您入门的解决方案。它使用lubridate
和dplyr
。它还会合并date
和time
并转换为POSIXct
对象。
library(dplyr)
library(lubridate)
ts_seqdf <- data.frame(date_time = seq(mdy_hm('02/01/2016 14:00'),
mdy_hm('02/01/2016 14:04'),
by = '1 min'))
datadf %>%
mutate(date_time = mdy_hm(paste(date, time, sep = ' '))) %>%
right_join(ts_seqdf, by = 'date_time') %>%
select(-date, -time)
## cost date_time
## 1 300 2016-02-01 14:00:00
## 2 NA 2016-02-01 14:01:00
## 3 NA 2016-02-01 14:02:00
## 4 120 2016-02-01 14:03:00
## 5 NA 2016-02-01 14:04:00
输入数据:
datadf <- structure(list(cost = c(300L, 120L), date = c("02/01/2016", "02/01/2016"), time = c("14:00", "14:03")), .Names = c("cost", "date", "time"), class = "data.frame", row.names = c(NA, -2L))