Seite 1 von 1

Immer 7 Spalten addieren

Verfasst: Sa Mai 29, 2021 11:07 am
von JoHannA
Hallo zusammen,

ich suche einen eleganten Weg zu folgendem Problem, das ich in ganz vielen Einzelschritten berechnet habe und deswegen sehr unübersichtlich ist:

Gegeben ist ein Dataframe mit 241 Spalten, von denen ich jeweils 7 addieren möchte und das Ergebnis in ein neues Dataframe speichern.

Meine Idee wäre eine for-Schleife, aber hier weiß ich nicht, wie ich jeweils 7 Spalten adressiere. Geht es vlt auch mit der apply-Funktion?

Re: Immer 7 Spalten addieren

Verfasst: Sa Mai 29, 2021 1:52 pm
von schubbiaschwilli
Gude!

Sowas - Nur halt mit 7 Variablen?

Code: Alles auswählen

data <- data.frame(x1=1:10, x2=11:20, x3=21:30)
result <- data.frame(sum=data$x1 + data$x2 + data$x3)
Dank&Gruß
Schubbiaschwilli

Re: Immer 7 Spalten addieren

Verfasst: Sa Mai 29, 2021 7:36 pm
von JoHannA
Vielen Dank!

Eine Rückfrage habe ich noch: In der ersten Zeile wird ein neues DataFrame erstellt, richtig?
Wie würde es funktionieren, wenn ich aus einem bestehenden DataFrame (z.B. Temperaturen) jeweils 7 Spalten addieren will und die Ergebnisse in ein neues DataFrame (z.B. Temperaturen_Woche) speichern will?

Anstatt 1:10 dann Temperaturen[, c(1,10)]?

Mit 241 Spalten ist es auch ziemlich umständlich, oder? Gibt es eine elegantere Lösung über eine Schleife oder Funktion z.B.?

Beste Grüße
Johanna

Re: Immer 7 Spalten addieren

Verfasst: Sa Mai 29, 2021 9:06 pm
von schubbiaschwilli
Gude!
Wie würde es funktionieren, wenn ich aus einem bestehenden DataFrame (z.B. Temperaturen) jeweils 7 Spalten addieren will und die Ergebnisse in ein neues DataFrame (z.B. Temperaturen_Woche) speichern will?
Ich verstehe die Frage nicht.

Dank&Gruß
Schubbiaschwilli

Re: Immer 7 Spalten addieren

Verfasst: Sa Mai 29, 2021 10:34 pm
von bigben
Hallo Johanna,

schau mal, ob Dir dieses Beispiel hilft:

Code: Alles auswählen

# Zufällige Beispieldaten mit 241 Spalten zum ausprobieren
bsp <- as.data.frame(matrix(rnorm(2410), ncol = 241))
str(bsp)

# Wir extrahieren die Spalten Nr. 45 bis 51 (das sind 7 Spalten)
auszug <- bsp[,45:51]
print(auszug)

# ich ändere da mal was. Das hilft uns später bei der Plausibilitätskontrolle:
auszug[1,] <- c(1, 1, 1, 1, 1, 1, 1) # eine Reihe mit lauter Einsen
auszug[2,] <- c(1, 0, 0, 0, 0, 0, 0) # eine Reihe mit nur einer Eins
print(auszug)

# Und davon berechnen wir jetzt die Zeilensummen
rowSums(auszug) # die manipulierten Zeilen haben korrekte Zeilensummen 7 bzw 1.
Wenn das nicht hilft, beschreibe bitte ausführlicher, was Du genau erreichen willst.

LG,
Bernhard

Re: Immer 7 Spalten addieren

Verfasst: Mo Mai 31, 2021 9:48 am
von jogo
Hallo Johanna,

willkommen im Forum!
241 ist nicht durch 7 teilbar. Was ist mit den anderen 3 Spalten?
Wenn die Größe des Dataframes nicht besonders ist, kann man den Dataframe in ein 3-dimensionales array umwandeln und dann apply() für die Summenbildung verwenden.

Code: Alles auswählen

M <- matrix(100*(1:3)+rep(1:14, each=3), 3, 14)
M
A <- array(M, c(3, 7, 2))
A
apply(A, c(1,3), sum)
Gruß, Jörg

Re: Immer 7 Spalten addieren

Verfasst: Mo Mai 31, 2021 10:10 am
von bigben
JoHannA hat geschrieben: Sa Mai 29, 2021 11:07 amGegeben ist ein Dataframe mit 241 Spalten, von denen ich jeweils 7 addieren möchte und das Ergebnis in ein neues Dataframe speichern.

Meine Idee wäre eine for-Schleife, aber hier weiß ich nicht, wie ich jeweils 7 Spalten adressiere.
Ach so, mit Jörgs Antwort verstehe ich jetzt, wie man die Frage noch verstehen kann. Vielleicht auch mit überlappenden 7er Einheiten? Mit der von Dir vorgeschlagenen for-Schleife könnte man sowas machen:

Code: Alles auswählen

bsp <- as.data.frame(matrix(rnorm(2410), ncol = 241))

ergebnis <- NULL # füllen wir später mit Daten

for(erste.spalte in 1:(241-6)) # spaltenweise abarbeiten
{
  letzte.spalte <- erste.spalte + 6
  r <- rowSums(bsp[,erste.spalte:letzte.spalte])
  ergebnis <- cbind(ergebnis, r)
}

ergebnis <- data.frame(ergebnis)
head(ergebnis)
LG,
Bernhard

Re: Immer 7 Spalten addieren

Verfasst: Mo Mai 31, 2021 10:47 am
von schubbiaschwilli
Gude!
241 ist nicht durch 7 teilbar. Was ist mit den anderen 3 Spalten?
Die Idee hatte ich auch, aber aus diesem Grund wieder verworfen.

Dank&Gruß
Schubbiaschwilli

Re: Immer 7 Spalten addieren

Verfasst: Di Jun 01, 2021 1:51 pm
von JoHannA
Vielen vielen Dank an alle Antworten! Haben mir sehr weitergeholfen!
Die for-Schleife war genau das, was ich mir gedacht hatte, aber mit meinem Wissen nicht in Code umsetzen konnte.

Liebe Grüße!
Johanna