2017-06-15 61 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

相關問題