2016-08-18 7 views
2

Ich habe ein Zeitserienobjekt mit Tageswerten, das im 19. Jahrhundert beginnt und bis ins 20. Jahrhundert reicht. Da sind viele fehlende Werte drin.Berechne wöchentliche Mittelwerte aus Zeitreihen mit fehlenden Daten in R

Ich versuche, wöchentliche Mittel zu berechnen und hier ist ein minimales Beispiel:

library(zoo) 
library(xts) 

# Create time series that starts in 19th century 
T <- 100 # number of days 
myTS <- xts(rnorm(T), as.Date(1:T, origin="1899-11-05")) 

# Insert some missing values 
myTS[4:7] <- NA 
myTS[33:34] <- NA 
myTS[67:87] <- NA 

# Try calculating weekly means 
weekData <- apply.weekly(myTS, colMeans, na.rm = TRUE) 

, die nur das wöchentliche Mittel für die letzte Woche zurück:

1900-02-13 [gewisser Wert

]

ich benutze colMeans statt nur mean, weil ich in einem größeren Datensatz mit mehreren Variablen bin arbeitet.

Ich möchte die Mittel für alle Wochen. Hat jemand eine Idee, was ich falsch mache?

Antwort

2

auf Ihrem Kommentar Aktualisiert basierend Woche Jahres Kombination zu verwenden: nicht der Mittelwert für week1 über Jahre, week2 über Jahre und so weiter

library(zoo) 
library(xts) 

# Create time series that starts in 19th century 
T <- 100 # number of days 
myTS <- xts(rnorm(T), as.Date(1:T, origin="1899-11-05")) 

# Insert some missing values 
myTS[4:7] <- NA 
myTS[33:34] <- NA 
myTS[67:87] <- NA 

# Let's use a flexible class 
myTS <- data.frame(dates=index(myTS),v1=myTS[,1]) 

# Here's an easy way to transform dates to weeks 
require(lubridate) 
week_num <- week(myTS[,1]) 
year_num <- year(myTS[,1]) 
week_yr <- paste(week_num, year_num) 

# Weekly means 
aggregate(myTS$v1,by=list(week_yr),mean,na.rm=T) 
Group.1   x 
1 1 1900 0.05405322 
2 2 1900 0.31981319 
3 3 1900   NaN 
4 4 1900   NaN 
5 45 1899 0.85081053 
6 46 1899 0.34064255 
7 47 1899 0.02880424 
8 48 1899 -0.34408119 
9 49 1899 -0.38089026 
10 5 1900 0.62292188 
11 50 1899 -0.59666955 
12 51 1899 0.57756987 
13 52 1899 -0.41325485 
14 53 1899 0.88013634 
15 6 1900 0.01514668 
16 7 1900 -0.50863942 
+0

Sorry, wollte, was ich ist. Aber ich würde gerne für alle diese Wochen getrennt sein. Also week1_1899, week2_1899, ..., week52_1900, week53_1900. –

+0

@ ulima2_ OK Ich habe es gerade aktualisiert, um es so zu machen –

+1

Fantastisch, das macht den Job! –

Verwandte Themen