Berechnen Sie die kumulative Summe für Ebenen einer Verschachtelungsvariablen
Frage
Ich hoffe, eine kumulative Summenvariable zu berechnen, die jedoch innerhalb der Ebenen einer bestimmten Verschachtelungsvariablen berechnet wird.Hier sind einige Beispieldaten:
data <- data.frame(cbind(ids=c(rep(1,6),rep(2,4),rep(3,3)), values=c(1,5,2,7,3,5,1,6,2,4,1,6,3)))
Ich möchte einen neuen Vektor, der so aussehen würde:
data$cumsum <- c(1,6,8,15,18,23,1,7,9,13,1,7,10)
Mit einem Endprodukt wie diesem:
> data
ids values cumsum
1 1 1 1
2 1 5 6
3 1 2 8
4 1 7 15
5 1 3 18
6 1 5 23
7 2 1 1
8 2 6 7
9 2 2 9
10 2 4 13
11 3 1 1
12 3 6 7
13 3 3 10
Danke!
Lösung
Sie können verwenden ave
:
transform(data, cumsum = ave(values, ids, FUN = cumsum))
data
# ids values cumsum
#1 1 1 1
#2 1 5 6
#3 1 2 8
#4 1 7 15
#5 1 3 18
#6 1 5 23
#7 2 1 1
#8 2 6 7
#9 2 2 9
#10 2 4 13
#11 3 1 1
#12 3 6 7
#13 3 3 10
Oder verwenden dplyr
:
library(dplyr)
data %>% group_by(ids) %>% mutate(cumsum = cumsum(values))
Andere Tipps
sollte mit data.table
für große Datensätze schneller sein
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow