Ich möchte einen Mittelwert aus einem 7-Tage-Rolling-Fenster mit 1-Tages-Inkrementen von Daten nehmen, die in 30-Minuten-Intervallen gesammelt werden. Ich habe versucht, data.table
mit by
bedingte Anweisung ohne Erfolg. Irgendein guidane würde sehr geschätzt werden.Nehmen Sie einen täglichen rollenden Mittelwert eines Sieben-Tage-Fensters für 30 Minuten abgetastete Daten.
# packages
library(data.table)
library(lubridate)
# Set set.seed to have reproducible sampling
set.seed(42)
# Create some Data
start = ymd_hms("2014-01-01 00:00:00")
end = ymd_hms("2014-12-31 23:59:59")
# Create data with 30 minute intervals.
dat <- data.table(timestamp = seq(start, end, by = "30 min"),
sample1 = sample(1:20, 17520, replace = TRUE))
# Create date variable for merging datasets.
dat[, date := as.Date(timestamp)]
# Create data for 7 day window moving window with one day increments.
dat2 <- data.table(start = seq(start, end, by = "1 day"),
end = seq(start + days(7), end + days(7), by = "1 day"))
# Create date variable for merging datasets.
dat2[, date := as.Date(start)]
# mergre datasets.
dat <- merge(dat, dat2, by="date")
# Tried
dat[, .(sample.mean = mean(sample1)), by = .(timestamp >= start & timestamp < end)]
# timestamp sample.mean
# 1: TRUE 10.46638
dat[, .(sample.mean = mean(sample1)), by = .(timestamp %in% c(start:end))]
# timestamp sample.mean
# 1: TRUE 10.40059
# 2: FALSE 10.46767
# Warning messages:
# 1: In start:end :
# numerical expression has 17520 elements: only the first used
# 2: In start:end :
# numerical expression has 17520 elements: only the first used
dat[, .(sample.mean = mean(sample1)), by = .(timestamp %between% c(start, end))]
# timestamp sample.mean
# 1: TRUE 19.00000
# 2: FALSE 10.46589
Sind die Fenster um Minuten oder Tage zentriert? Dh, sind Beobachtungen von 12:00 und 13:00 am selben Tag mit dem gleichen Umgebungsfenster identisch, oder sind die mit der 13:00 Beobachtung verbundenen Beobachtungen eine Stunde nach vorne geschoben? – MichaelChirico
@ Frank danke für den Fang, aktualisiert damit Zufallsauswahl ist reproduzierbar – user3498523
@ MichaelChirico, sind die Fenster um Tage zentriert. Jedes Fenster von sieben Tagen würde insgesamt 336 Proben haben und sollte um einen Tag erhöht werden. – user3498523