2017-05-12 3 views
0

Ich habe Datenrahmen wie untenWie 15 Minuten-Intervall für jede 2 & 3 Reihe bisher Zeitreihe hinzufügen

Date_time  name 
    11/1/2016 6:00  A 
    11/1/2016 6:00  A 
    11/1/2016 6:00  A 
    11/1/2016 6:45  A 
    11/2/2016 11:00  B 
    11/2/2016 11:00  B 
    11/2/2016 11:00  B 
    11/2/2016 11:45  B 

oben df in 15 Intervall sein sollte wir knoe nach 00 Minuten, sollte neben einer 15 & 30 sein & 45 Intervalle O/p

sollte
Date_time  name New_Date_time 
    11/1/2016 6:00  A  11/1/2016 6:00 
    11/1/2016 6:00  A  11/1/2016 6:15  
    11/1/2016 6:00  A  11/1/2016 6:30  
    11/1/2016 6:45  A  11/1/2016 6:45  
    11/2/2016 11:00  B  11/2/2016 11:00  
    11/2/2016 11:00  B  11/2/2016 11:15 
    11/2/2016 11:00  B  11/2/2016 11:30 
    11/2/2016 11:45  B  11/2/2016 11:45  

Vielen Dank im Voraus

Antwort

0

ich gehe davon aus Ihrem Variable Date_time ist ein Zeichen und es gibt immer 4 Beobachtungen für jede name. Anschließend können Sie wie folgt vorgehen:

## Your data: 
df <- structure(list(Date_time = c("11/1/2016 6:00", "11/1/2016 6:00", 
    "11/1/2016 6:00", "11/1/2016 6:45", "11/2/2016 11:00", "11/2/2016 11:00", 
    "11/2/2016 11:00", "11/2/2016 11:45"), name = c("A", "A", "A", 
    "A", "B", "B", "B", "B")), .Names = c("Date_time", "name"), 
    class = "data.frame", row.names = c(NA, -8L)) 

library(dplyr) 
library(lubridate) 
df <- df %>% 
     dplyr::mutate(Date_time = as.POSIXct(Date_time, format = "%m/%d/%Y %H:%M")) %>% 
     group_by(name) %>% 
     dplyr::mutate(New_Date_time = min(Date_time) + lubridate::minutes(c(0,15,30,45))) 

df 
# Source: local data frame [8 x 3] 
# Groups: name [2] 
# 
#    Date_time name  New_Date_time 
#    <dttm> <chr>    <dttm> 
# 1 2016-11-01 06:00:00  A 2016-11-01 06:00:00 
# 2 2016-11-01 06:00:00  A 2016-11-01 06:15:00 
# 3 2016-11-01 06:00:00  A 2016-11-01 06:30:00 
# 4 2016-11-01 06:45:00  A 2016-11-01 06:45:00 
# 5 2016-11-02 11:00:00  B 2016-11-02 11:00:00 
# 6 2016-11-02 11:00:00  B 2016-11-02 11:15:00 
# 7 2016-11-02 11:00:00  B 2016-11-02 11:30:00 
# 8 2016-11-02 11:45:00  B 2016-11-02 11:45:00 

Edit:

Wenn die Anzahl der Beobachtungen variiert, dann ersetzen Sie einfach c(0,15,30,45) durch seq(from = 0, by = 15, length.out = n()), das heißt:

df <- df %>% 
     dplyr::mutate(Date_time = as.POSIXct(Date_time, format = "%m/%d/%Y %H:%M")) %>% 
     group_by(name) %>% 
     dplyr::mutate(New_Date_time = min(Date_time) + 
         lubridate::minutes(seq(from = 0, by = 15, length.out = n()))) 
+0

dank @ikop, was ist, wenn die Größe der Gruppe variiert .. in meinem Fall Größe der Gruppen sind nicht übereinstimmend .. den Fehler wie "Fehler in mutate_impl (.data, dots): inkompatible Größe (4), erwartet 8 (die Gruppengröße) oder 1" – snr999

+0

Du könntest nicht ry ersetzt 'minutes (c (0,15,30,45))' mit 'minutes (seq (von = 0, durch = 15, length.out = n())' – ikop

+0

Das ist großartig @ikop, es funktioniert. Danke vielmals – snr999