spaltenweise Berechnung (for-Schleife, Indizierung oder apply oder andere Idee?)

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
fablink
Beiträge: 2
Registriert: So Aug 12, 2018 9:08 am

spaltenweise Berechnung (for-Schleife, Indizierung oder apply oder andere Idee?)

Beitrag von fablink » So Aug 12, 2018 9:20 am

Hallo zusammen,

ich hänge gerade an folgender Kleinigkeit und bin sicher, es gibt ne relativ einfache Lösung, auf die ich aber gerade nicht komme.
Meine Daten sind in einer Tabelle, in der ich einen Spaltenname habe, dann habe ich eine Zeitreihe in 15-Minutenintervallen in Spalten für ein Jahr. Also Variablen (Standorte) in Spalten, Werte in Zeilen in 15 Minuten-Schritten. Vorne dran habe ich eine eine "Stunden"-Variable erstellt und drangeheftet:

Code: Alles auswählen

stunden <- sort(rep(1:8784,4))
y<- cbind(stunden, x)
Ich möchte daraus stündliche Werte basteln, also immer 4 Werte zusammenfassen, was ich für eine Spalte mit dem dplyr-Paket und folgenden Zeilen gelöst habe:

Code: Alles auswählen

Ausgabe<- y %>%
  group_by(stunden) %>%
  summarise(avg = mean(y$spalte2))
Damit bekomme ich den Vektor mit den Stundenwerten für eine Spalte. (Soweit, so gut!)
Theoretisch könnte ich das natürlich jetzt händisch so weiterführen und mit allem mal durchgehen, eleganter (und schneller... ich habe viele Spalten) wäre aber, das nun "automatisch" für alle Spalten zu machen. Ich habe ein bisschen herumprobiert mit einer funktion, for-Schleifen etc., aber ich kriege es nicht hin. (Bzw. ich habe auch schon überlegt, aus der Tabelle einen langen Vektor zu machen, das Mittel zu berechnen und wieder zu ner Matrix zusammenzufügen, aber das ist irgendwie ja auch Pfuscherei, gerade mit R muss das doch irgendwie geschickt gehen?)

Danke schonmal für Anregungen und Ideen

Benutzeravatar
EDi
Beiträge: 604
Registriert: Sa Okt 08, 2016 3:39 pm

Re: spaltenweise Berechnung (for-Schleife, Indizierung oder apply oder andere Idee?)

Beitrag von EDi » So Aug 12, 2018 9:52 am

Um im tidyverse zu bleiben:

Code: Alles auswählen

Ausgabe<- y %>%
  group_by(stunden) %>%
  summarise_all(funs(mean))
summarise_at und summarise_if können auch hilfreich sein, falls du nicht alle Spalten aggregieren willst.
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.

jogo
Beiträge: 820
Registriert: Fr Okt 07, 2016 8:25 am

Re: spaltenweise Berechnung (for-Schleife, Indizierung oder apply oder andere Idee?)

Beitrag von jogo » So Aug 12, 2018 10:00 am

Hallo Fablink,

willkommen im Forum!
fablink hat geschrieben:
So Aug 12, 2018 9:20 am

Code: Alles auswählen

stunden <- sort(rep(1:8784,4))
y<- cbind(stunden, x)
Wenn Du bei rep() die Parameter etwas anders wählst, musst Du nicht sortieren:

Code: Alles auswählen

stunden <- rep(1:8784, each=4)
Ich möchte daraus stündliche Werte basteln, also immer 4 Werte zusammenfassen, was ich für eine Spalte mit dem dplyr-Paket und folgenden Zeilen gelöst habe:

Code: Alles auswählen

Ausgabe<- y %>%
  group_by(stunden) %>%
  summarise(avg = mean(y$spalte2))
Damit bekomme ich den Vektor mit den Stundenwerten für eine Spalte. (Soweit, so gut!)
Leider kenne ich mich im dplyr-Universum nicht so gut aus.
In base R sieht das so aus:

Code: Alles auswählen

aggregate(as.matrix(iris[-5]) ~ iris$Species, FUN=mean)
also für Dich

Code: Alles auswählen

aggregate(as.matrix(x) ~ stunden, FUN=mean)
Mit data.table sieht es so aus:

Code: Alles auswählen

library("data.table")
setDT(y)
y[, lapply(.SD, mean), stunden]
Bei dplyr schau mal nach der Funktion summarise_all() https://rdrr.io/cran/dplyr/man/summarise_all.html

Gruß, Jörg

fablink
Beiträge: 2
Registriert: So Aug 12, 2018 9:08 am

Re: spaltenweise Berechnung (for-Schleife, Indizierung oder apply oder andere Idee?)

Beitrag von fablink » So Aug 12, 2018 1:41 pm

Hey Jogo und Edi,

Ihr seid großartig und ich stand echt nur auf dem Schlauch. Wenn ich "summarise" durch "summarise_all" ersetze (in obigen kleinem codeschnipsel), dann passts perfekt! :oops: :roll:

Und danke für das herzliche Willkommen!
Ich bin hier eigenltich noch angemeldet (fablink26 glaube ich), aber weiß mein Passwort nicht mehr und an die E-Mail komm ich nicht mehr ran, daher habe ich mich geschwind nochmal angemeldet (grrrr, sorry)

You made my day! Ich bekomm das grinsen grade nicht mehr aus dem Gesicht, Ihr habt mir superklasse geholfen!
Danke, danke, danke, danke, danke!

Viele Grüße
Fabian

bigben
Beiträge: 624
Registriert: Mi Okt 12, 2016 9:09 am

Re: spaltenweise Berechnung (for-Schleife, Indizierung oder apply oder andere Idee?)

Beitrag von bigben » So Aug 12, 2018 4:48 pm

fablink26 scheint es hier nicht zu geben.
LG, Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast