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
Berechnung von Fenstern bestimmter Breite
Re: Berechnung von Fenstern bestimmter Breite
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
.
Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
.
Re: Berechnung von Fenstern bestimmter Breite
Hallo EDi,
danke für deine Antwort!
Hier folgt nun das Minimalbeispiel:
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
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)
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
Re: Berechnung von Fenstern bestimmter Breite
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
.
Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
.
Re: Berechnung von Fenstern bestimmter Breite
Vielen Dank, das ist genau, was ich gesucht habe!
Zum Verständnis habe ich aber noch eine Frage:
Was bewirkt im dritten Beispiel?
Viele Grüße
Marge
Zum Verständnis habe ich aber noch eine Frage:
Was bewirkt
Code: Alles auswählen
align = 'left'
Viele Grüße
Marge
Re: Berechnung von Fenstern bestimmter Breite
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
.
Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
.