2017-12-05 20 views
0

몇 가지 계산을 수행하려는 데이터 프레임이 있습니다.행을 뺀 다음 합계 값

aa = c (1,3,1,0,0,1,6,1,14,3,0) 
bb = c (0,0,5,0,0,1,6,0,2,15,1) 
ee = rbind(aa,bb) 
df = as.data.frame (ee) 

먼저 I가 로우 AA에서 첫 번째 값에서 로우 (BB)의 제 1 값을 감산하고 싶습니다 ... 1 - 0은 ... 결과는 로우 AA의 두 번째 값을 추가한다. ... (1) + 3 = 4 ... 다음은 4 - 0 ... 및 AA 4 + 1 = 5, ... 등등

원하는 결과이다 :

cc = c (1,4,5,0,0,1,6,1,15,16,1) 
ff = rbind(cc,bb) 
df1 = as.data.frame(ff) 

어떤 아이디어 정말 고맙다!

답변

3

당신은 누적 합계의 차이를 수행 할 :

cc <- cumsum(aa) - cumsum(c(0, bb[-length(bb)])) 

내가 처음에 0을 추가 BB의 마지막 elment 떨어졌다. 당신이 i 번째 요소에서 i 번째 BB

을 substracting 전에 결과를 원하기 때문에 나는 그것을 테스트 :

aa = c (1,3,1,0,0,1,6,1,14,3,0) 
bb = c (0,0,5,0,0,1,6,0,2,15,1) 
cc <- cumsum(aa) - cumsum(c(0, bb[-length(bb)])) 
cc 
[1] 1 4 5 0 0 1 6 1 15 16 1 

편집 : 그것 (LMO 감사는) 할 수있는 또 다른 방법은 다음과 같습니다

cc <- cumsum(aa - c(0, head(bb, -1))) 
+0

같이 할 수있는, 내 잘못은 정확하다. –

+0

이러한 연산은 연관적이고 교환 가능하기 때문에, 아주 단순한'cumsum (aa -c (0, head (bb, -1)))'을 할 수있다. – lmo

+0

좋아요! 도와 주셔서 정말 감사합니다! – Art

0

당신은 예이

for(i in 1:10){ 
    aa[i+1] <- (aa[i] - bb[i]) + aa[i+1] 
} 

aa 

[1] 1 4 5 0 0 1 6 1 15 16 1 
+0

감사합니다! 이것은 또 다른 관점을 제시합니다. – Art