문제
누적 합계 변수를 계산하지만 주어진 중첩 변수의 수준 내에서 계산되기를 바랍니다.다음은 몇 가지 예제 데이터입니다.
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)))
.
이렇게 보이는 새로운 벡터를 원해요 :
data$cumsum <- c(1,6,8,15,18,23,1,7,9,13,1,7,10)
.
이와 같이 최종 제품으로 다음과 같이 :
> 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
.
감사합니다!
해결책
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
.
또는 dplyr
사용 :
library(dplyr)
data %>% group_by(ids) %>% mutate(cumsum = cumsum(values))
. 다른 팁
대형 데이터 세트의 data.table
가 더 빠르면
library(data.table)
setDT(data)[, Cumsum:=cumsum(values), by=ids]
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
. 제휴하지 않습니다 StackOverflow