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
Beiträge: 3
Registriert: Mo Mai 14, 2018 10:35 pm

Berechnung von Fenstern bestimmter Breite

Beitrag von Marge » Mo Mai 14, 2018 11:31 pm

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: 551
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Berechnung von Fenstern bestimmter Breite

Beitrag von EDi » Di Mai 15, 2018 12:24 am

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
Beiträge: 3
Registriert: Mo Mai 14, 2018 10:35 pm

Re: Berechnung von Fenstern bestimmter Breite

Beitrag von Marge » Mi Mai 16, 2018 4:22 pm

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: 551
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Berechnung von Fenstern bestimmter Breite

Beitrag von EDi » Mi Mai 16, 2018 9:01 pm

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
Beiträge: 3
Registriert: Mo Mai 14, 2018 10:35 pm

Re: Berechnung von Fenstern bestimmter Breite

Beitrag von Marge » Do Mai 17, 2018 10:44 am

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: 551
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Berechnung von Fenstern bestimmter Breite

Beitrag von EDi » Do Mai 17, 2018 8:21 pm

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

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 1 Gast