Ich habe einen Datenrahmen und möchte für jede Zeile die Summe jeder zweiten Zelle (beginnend mit der zweiten Zelle), deren linker Nachbar größer als Null ist. Hier ein Beispiel:R, bedingte Summierung jeder zweiten Zelle in jeder Zeile
a <- c(-2,1,1,-2)
b <- c(1,2,3,4)
c <- c(-2,1,-1,2)
d <- c(5,6,7,8)
df <- data.frame(a,b,c,d)
Das gibt:
> df
a b c d
1 -2 1 -2 5
2 1 2 1 6
3 1 3 -1 7
4 -2 4 2 8
Für die erste Reihe der richtige Summe 0 (der linke Nachbarn von 1 -2 und dem linken Nachbarn von 5 ist auch -2) ; für die Sekunde ist es 8; für das dritte ist es 3; für die vierte ist es wieder 8.
Ich möchte es ohne Schleifen zu tun, so versuchte ich es mit sum()
und which()
wie in Conditional Sum in R, aber konnte keinen Weg durch.
Map
Dies funktioniert gut ersetzt bekommen werden aber ich verstehe nicht wie. Was macht der '*' Operator? – Joe@Joe Es ist der Operator für die Multiplikation, so wie die entsprechenden Werte für andere logische Matrix auf 0 für FALSE konvertieren – akrun