문제

누적 합계 변수를 계산하지만 주어진 중첩 변수의 수준 내에서 계산되기를 바랍니다.다음은 몇 가지 예제 데이터입니다.

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
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top