2017-06-15 58 views
0

我有几个数据集,大多数时间间隔为15分钟。但是,某些数据集缺少读数(例如,样本数据集中的第3行应该是“2015年5月1日00:40 AM”)。此外,还有一些时间步长超过15分钟(例如,参见第3行和第6行) 如何添加缺少的时间步骤,使我的日期将继续以​​15米分钟的间隔,并在同一时间调整的时间步长超过15周分钟的时间间隔15分钟?如何填写丢失和调整data.frame中的不规则时间间隔R

s <- data.frame(Date = c(
         "May 1 2015 00:10AM","May 1 2015 00:25AM", 
         "May 1 2015 00:56AM","May 1 2015 01:10AM", 
         "May 1 2015 01:25AM","May 1 2015 01:41AM", 
         "May 1 2015 01:55AM"), 
         val = c(1:7) 
       ) 

我所需的输出将是以下:

> s 
       Date val 
1 May 1 2015 00:10AM 1 
2 May 1 2015 00:25AM 2 
3 May 1 2015 00:40AM NA 
4 May 1 2015 00:55AM 3 
5 May 1 2015 01:10AM 4 
6 May 1 2015 01:25AM 5 
7 May 1 2015 01:40AM 6 
8 May 1 2015 01:55AM 7 
+0

你能请提供您最终期望的data.frame的例子? – ccapizzano

+0

抱歉的格式,但我需要这样的事情: s < - data.frame(Date = c( “2015年5月1日00:10 AM”,“2015年5月1日00:25 AM”,“2015年5月1日00:40 AM “,”2015年5月1日00:55“,”2015年5月1日01:10“,”2015年5月1日01:25“,”2015年5月1日01:40“,”2015年5月1日01:55“),val = c(1,2,NA,3,4,5,6,7) ) – Jack

+0

请在问题中输入所需的输出,而不是在评论中。 – putu

回答

0

你可以尝试以下方法:

首先,把你的s数据框中变量“日期”为POSIXct,所以你可以使用它:

s <- data.frame(Date = c(
    "May 1 2015 00:10AM","May 1 2015 00:25AM", 
    "May 1 2015 00:56AM","May 1 2015 01:10AM", 
    "May 1 2015 01:25AM","May 1 2015 01:41AM", 
    "May 1 2015 01:55AM"), 
    val = c(1:7) 
) %>% dplyr::mutate(Date = lubridate::parse_date_time(Date, "b d Y HM")) 

其次,你可以使用具有所有您所期待的时间间隔的另一个数据帧加入这个。首先,我们构建它,使用时间间隔的差异(15分钟,在这种情况下):

one <- lubridate::parse_date_time("May 1 2015 00:10AM", orders = "b d Y HM") 
two <- lubridate::parse_date_time("May 1 2015 00:25AM", orders = "b d Y HM") 
dif <- two - one 

现在数据框:

other_df <- data.frame(
    Date = seq(from = lubridate::parse_date_time("May 1 2015 00:10AM", 
             orders = "b d Y HM"), 
     to = lubridate::parse_date_time("May 1 2015 01:55AM", 
             orders = "b d Y HM"), 
     by = dif)) 

加入两个:

result <- dplyr::full_join(other_df, s) 

> result 
        Date val 
1 2015-05-01 00:10:00 1 
2 2015-05-01 00:25:00 2 
3 2015-05-01 00:40:00 NA 
4 2015-05-01 00:55:00 NA 
5 2015-05-01 01:10:00 4 
6 2015-05-01 01:25:00 5 
7 2015-05-01 01:40:00 NA 
8 2015-05-01 01:55:00 7 
9 2015-05-01 00:56:00 3 
10 2015-05-01 01:41:00 6 
+0

我有一个非常类似的想法,使用'base'编码,很高兴我们在同一页上。然而,最终的输出包括额外的行和“NA”,因为时间间隔是原始数据帧的一到两分钟偏移量(例如,“2015-05-01 01:41:00”vs '2015-05-01 01:40:00')。 – ccapizzano

+0

我还有一个问题,那就是如何调整时间间隔,以一分钟为单位进行偏移,以便一切都以15分钟为间隔 – Jack

+1

您可以使用'lubridate'中的'floor_date'函数并每次添加10分钟来完成此操作。例如,$ Date <-lubridate :: floor_date(s $ Date,“15分钟”)+(60 * 10)'将产生你想要的15分钟间隔,同时保留'val'列完好 – ccapizzano

相关问题