Berechnung von Fenstern bestimmter Breite

Wie erweitere ich R um eigene Funktionen oder Pakete? Welches Paket ist passend für meine Fragestellung?

Moderatoren: EDi, jogo

Antworten
Marge

Berechnung von Fenstern bestimmter Breite

Beitrag von Marge »

Guten Abend zusammen!

Im Rahmen einer Hausarbeit habe ich einige Datensätze (Matrizen) mit teilweise tausenden Zeilen, die ich nun auswerten möchte. Ich stehe dabei vor dem Problem, dass ich z.B. den Mittelwert nicht über alle Werte, sondern über Windows mit bestimmter, gleichmäßiger Breite bilden möchte. Ich habe schon gesucht und bin auf Funktionen/Objekte wie Cluster Analysis, Time Windows und Time-series gestoßen, allerdings habe ich es damit nicht richtig hinbekommen.
Nun meine Frage: Gibt es eine Funktion oder ähnliches, bei der ich
1. meinen Dataframe einlesen
2. die Anzahl der Werte auf die eine Funktion (z.B. Mittelwert) angewandt werden soll angeben und
3. die anzuwendende Funktion (z.B. Mittelwert) bestimmen kann?

Ich freue mich über jeden Hinweis :)
Viele Grüße
Marge
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Berechnung von Fenstern bestimmter Breite

Beitrag von EDi »

rollapply aus dem zoo Paket macht das unter anderem . Ohne ein reproduzierbares Beispiel kann ich aber nicht mehr in Details gehen.
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Marge

Re: Berechnung von Fenstern bestimmter Breite

Beitrag von Marge »

Hallo EDi,

danke für deine Antwort!
Hier folgt nun das Minimalbeispiel:

Code: Alles auswählen

zeit <- c(12, 13, 14, 15, 16, 17, 18)
accx <- c(-0.262, -0.385, -0.415, -0.323, -0.292, -0.323, -0.385)
accy <- c(-0.875, -0.906, -0.875, -0.875, -0.875, -0.906, -0.906)
accz <- c(0.206,  0.333,  0.365,  0.270,  0.238,  0.238,  0.302)
test <- data.frame(zeit, accx, accy, accz)
test
rollapply(test$accz, 3, mean, fill=NA)
In der Matrix sind vier Spalten: die erste beinhaltet die Zeit in Sekunden, die anderen drei behinhalten Beschleunigungen in x-, y- und z-Richtung.

Nach deinem Hinweis zu der Funktion rollapply habe ich mir die Beschreibung durchgelesen und ausprobiert, stoße allerdings weiterhin auf ein Problem.
rollapply berechnet für die ersten drei Werte (entsprechend der Zeit 12 bis 14) von accz den richtigen Mittelwert. Aber statt dass anschließend der Mittelwert der darauf folgenden drei accz-Werte (entsprechend der Zeit 15 bis 17) berechnet wird, kommt ein Ergebnis raus, das ich nicht nachvollziehen kann. Zudem möchte ich die Anzahl der ausgegebenen Ergebnisse durch das Zusammenfassen von jeweils drei Werten verringern, das passiert allerdings auch nicht.

Ich hoffe, das Beispiel hilft, um meine Frage besser nachvollziehen zu können.
Viele Grüße
Marge
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Berechnung von Fenstern bestimmter Breite

Beitrag von EDi »

Hilft dir das weiter? Das by= argument macht das. Anbei noch weitere Beispiele...

Code: Alles auswählen

zeit <- c(12, 13, 14, 15, 16, 17, 18)
accx <- c(-0.262, -0.385, -0.415, -0.323, -0.292, -0.323, -0.385)
accy <- c(-0.875, -0.906, -0.875, -0.875, -0.875, -0.906, -0.906)
accz <- c(0.206,  0.333,  0.365,  0.270,  0.238,  0.238,  0.302)
test <- data.frame(zeit, accx, accy, accz)

library(zoo)
rollapply(test$accz, width = 3, FUN=mean, by = 3)

# all at once
rollapply(test, width = 3, FUN=mean, by = 3)

# all at once, for all (last has only 1 obs)
rollapply(test, width = 3, FUN=mean, by = 3, partial =TRUE, align = 'left')

# same, without rollapply
test$idx <- rep(seq_len(ceiling(nrow(test) / 3)), each = 3)[1:nrow(test)]
tapply(test$accz, test$idx, mean)
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Marge

Re: Berechnung von Fenstern bestimmter Breite

Beitrag von Marge »

Vielen Dank, das ist genau, was ich gesucht habe! :)

Zum Verständnis habe ich aber noch eine Frage:
Was bewirkt

Code: Alles auswählen

align = 'left'
im dritten Beispiel?

Viele Grüße
Marge
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Berechnung von Fenstern bestimmter Breite

Beitrag von EDi »

siehe

Code: Alles auswählen

?rollapply 
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Antworten