Berechnen Sie die kumulative Summe für Ebenen einer Verschachtelungsvariablen

StackOverflow https://stackoverflow.com//questions/25086798

  •  02-01-2020
  •  | 
  •  

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!

War es hilfreich?

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

generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top