2013-06-03 3 views
2

간단한 질문이 있지만 stackoverflow에 대한 대답을 찾을 수 없습니다. 어쩌면 잘못된 검색어를 사용하고있을 수도 있습니다. 어쨌든 이것은 내 질문입니다 :R : 각 행에 이전 행의 누적 합계가있는 데이터 프레임에 열을 추가하는 방법은 무엇입니까?

각 행에 모든 이전 행의 누적 합계가있는 데이터 프레임에 열을 추가하려고합니다. 예를 들어 데이터 프레임 X에 열 V1과 V2가 있습니다. 예제에서이 경우 V3에 내가 만들려 추가 된 열입니다 :

X =

V1 V2 V3 
1 0.5 0.5 
2 2.0 2.5 
3 1.9 4.4 
4 0.0 4.4 
5 5.1 9.5 

나는 이것이 실제로 많은 더 큰 (5000 행)입니다 적용 할에 실제 데이터 프레임. 팁 또는 솔루션 누구? 대단 하시겠습니까!

+3

그래서 'cumulative sum'과'r'을 검색해도'cumsum'으로 연결되지 않았습니까? – joran

+0

Google에서 테스트 한 결과 첫 번째로 인기가있는 것으로 보입니다. +1 조란 :-) –

답변

1

함수가 속임수를 사용하지만 여러 열에 걸쳐이를 원하기 때문에 먼저 행간에 합계를 가져와야합니다. 이것은 apply() 기능으로 수행 할 수 있습니다. 당신이 찾고있는 것을 이해한다고 가정하면 다음과 같습니다 :

> set.seed(2) 
> dat <- data.frame(a=round(rnorm(10),2),b=round(rnorm(10),2),c=round(rnorm(10),2)) 
> dat$cumsum <- cumsum(apply(dat,1,sum)) 
> dat 
     a  b  c cumsum 
1 -0.90 0.42 2.09 1.61 
2 0.18 0.98 -1.20 1.57 
3 1.59 -0.39 1.59 4.36 
4 -1.13 -1.04 1.95 4.14 
5 -0.08 1.78 0.00 5.84 
6 0.13 -2.31 -2.45 1.21 
7 0.71 0.88 0.48 3.28 
8 -0.24 0.04 -0.60 2.48 
9 1.98 1.01 0.79 6.26 
10 -0.14 0.43 0.29 6.84 
+0

그의 합계는 열'V2' 이상입니다. –

+0

그렇다면 나는 질문을 잘못 읽고 그의 질문은 처음에 물어서는 안되었습니다. 하나의 변수에 cumsum()을 적용하는 많은 예제가 있습니다. – David

+2

당신의 해석이 정확하다면 (아마도 그렇게 보이지는 않을 것입니다),'cumsum (rowSums (dat)) '을 사용하는 것이 더 빠를 것입니다. –