使用增量分钟创建数据框作为行(R)

时间:2016-03-30 00:41:29

标签: r

我想创建一个如下所示的数据框:

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

谢谢!

2 个答案:

答案 0 :(得分:2)

查找函数seq.POSIXt。此功能旨在创建时间序列。对于你的问题:

seq(ISOdate(2016,2,02, 14, 00, 00), by = "min", length.out = 5)

可以选择指定开始和停止间隔。如果你打算多次工作,我建议研究strptime函数和POSIXt时间类。

答案 1 :(得分:2)

这是一个可以帮助您入门的解决方案。它使用lubridatedplyr。它还会合并datetime并转换为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))