2016-12-21 6 views
0

Ich versuche Spaltensumme von je 5 Reihen für jede Zeile in R mit dem folgenden Code zu berechnen:Berechnung Spaltensumme für bestimmte Zeile

df <- data.frame(count=1:10) 

for (loop in (1:nrow(df))) 
{df[loop,"acc_sum"] <- sum(df[max(1,loop-5):loop,"count"])} 

Aber ich weiß nicht wie die explizite Schleife hier, wie kann ich es ändern? Vielen Dank.

+0

'zoo :: rollsum (df $ count, 6, align =" rechts ", fill = NA)' – Khashaa

+0

@Khashaa danke, rollsum funktioniert. –

Antwort

0

Nach Ihrer Frage, Ihr gewünschtes Ergebnis ist:

df 
# count acc_sum 
# 1  1  1 
# 2  2  3 
# 3  3  6 
# 4  4  10 
# 5  5  15 
# 6  6  21 
# 7  7  27 
# 8  8  33 
# 9  9  39 
# 10 10  45 

Dies kann wie folgt geschehen:

df <- data.frame(count=1:10) 

library(zoo) 

df$acc_sum <- rev(rollapply(rev(df$count), 6, sum, partial = TRUE, align = "left")) 

dieses Ergebnis zu erhalten, wir die Reihenfolge des df$count aufheben, fassen wir Die Elemente (unter Verwendung von partial = TRUE und align = "left" ist hier wichtig), und wir kehren das Ergebnis um, damit der Vektor benötigt wird.

Beachten Sie, dass dies 6 Elemente summiert, nicht 5. Entsprechend dem Code in Ihrer Frage gibt dies die gleiche Ausgabe. Wenn Sie nur 5 Zeilen summieren möchten, ersetzen Sie einfach die 6 durch eine 5.

Verwandte Themen