2017-02-21 2 views
2

Ich habe einen Datenrahmen mit Zeitreihendaten für mehrere verschiedene Gruppen. Ich möchte für jede Gruppe innerhalb des ursprünglichen Datenrahmens unterschiedliche Anfangs- und Enddaten angeben.Subset Zeitreihe nach Gruppen basierend auf Stichtag Datenrahmen

Hier ist ein Beispieldatenrahmen:

date <- seq(as.POSIXct("2014-07-21 17:00:00", tz= "GMT"), as.POSIXct("2014-09-11 24:00:00", tz= "GMT"), by="hour") 
group <- letters[1:4]       
datereps <- rep(date, length(group))     
attr(datereps, "tzone") <- "GMT" 
sitereps <- rep(group, each = length(date))  
value <- rnorm(length(datereps)) 
df <- data.frame(DateTime = datereps, Group = group, Value = value) 

und hier ist der Datenrahmen ‚schneiden‘ Cutoff Daten zu verwenden:

start <- c("2014-08-01 00:00:00 GMT", "2014-07-26 00:00:00 GMT", "2014-07-21 17:00:00 GMT", "2014-08-03 24:00:00 GMT") 
end <- c("2014-09-11 24:00:00 GMT", "2014-09-01 24:00:00 GMT", "2014-09-07 24:00:00 GMT", "2014-09-11 24:00:00 GMT") 
cut <- data.frame(Group = group, Start = as.POSIXct(start), End = as.POSIXct(end)) 

ich es kann für jede Gruppe manuell tun, loszuwerden die Daten, die ich möchte nicht an beiden Enden der Zeitreihe mit ![(),]:

df2 <- df[!(df$Group == "a" & df$DateTime > "2014-08-01 00:00:00 GMT" & df$DateTime < "2014-09-11 24:00:00 GMT"),] 

B Wie kann ich das automatisieren?

Antwort

1

Fügen Sie die Schnitte einfach in den Datenrahmen ein und erstellen Sie dann einen neuen Datenrahmen mit den neuen Spalten, wie unten. df3 enthält die entfernten Datensätze, df4 enthält die beibehaltenen Datensätze.

df2 <- merge(x = df,y = cut,by = "Group") 
df3 <- df2[df2$DateTime <= df2$Start | df2$DateTime >= df2$End,] 
df4 <- df2[!(df2$DateTime <= df2$Start | df2$DateTime >= df2$End),] 
+0

OK, was ist, wenn Sie etwas Ähnliches machen möchten, aber dieses Mal, anstatt Daten zu löschen, nur Zeilen markieren, die _within_ einem bestimmten Datumszeitrahmen sind (noch einmal durch Start- und Enddatum angegeben)? Ich habe hier eine neue Frage gestellt [Spalte erstellen, um Zeilen innerhalb eines Datumszeitraums in R zu kennzeichnen] (http://stackoverflow.com/questions/42516632/create-column-to-flag-rows-within-a-date-period- in-r/42516781 # 42516781) – notacodr

+1

@notacodr In diesem Code unterteilen wir einen Datenrahmen mit einem Vektor aus Wahr- und Falschaussagen. Wenn Sie also ein Flag erstellen wollten, das TRUE war, wenn sich etwas innerhalb des Bereichs befand, und FALSE, dann könnten Sie das tun: 'df2 $ flagvar <-! (Df2 $ DateTime <= df2 $ Start | df2 $ DateTime> = df2 $ End) ' – TARehman

+0

Ja, ich mag es. Vielen Dank! – notacodr

Verwandte Themen