2017-12-05 9 views
0

Ich habe diesen Datenframe, wo ich einige Berechnungen durchführen möchte.Zeilen subtrahieren und dann Werte addieren

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) 

Zuerst Ich mag von dem ersten Wert in der Reihe AA den ersten Wert in der Zeile BB subtrahieren ... 1 - 0 ... dann das Ergebnis auf den zweiten Wert in der Reihe AA hinzuzufügen. .. 1 + 3 = 4 ... dann 4-0 ... und in aa 4 + 1 = 5 und so weiter ...

Das gewünschte Ergebnis ist:

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

Irgendwelche Ideen wirklich geschätzt!

Antwort

3

Sie wollen einen Unterschied von kumulativen Summen auszuführen:

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

ich eine 0 am Anfang hinzugefügt und ließ den letzten elment von bb. Weil Sie das Ergebnis auf dem i-ten Element möchten, bevor Substraktion das i-te bb

Ich teste es:

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 

Edit: Ein anderer Weg, es zu tun (dank LMO) ist:

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

wie diese tun ja, mein Fehler, der ans ist korrekt –

+0

Da diese Operationen assoziativ und kommutativ sind, können Sie auch 'cumsum (aa - c (0, Kopf (bb, -1))) 'tun, was ein kleines bisschen einfacher ist. – lmo

+0

Großartig! vielen Dank für deine Hilfe! – Art

0

Sie können

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

danke! Dies gibt eine andere Perspektive. – Art

Verwandte Themen