У меня есть кадр данных и хочу, чтобы для каждой строки была сумма каждой второй ячейки (начиная со второй ячейки), левый сосед которой больше нуля. Вот пример:R, условное суммирование каждой второй ячейки в каждой строке
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)
Это дает:
> 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
В первой строке правильная сумма 0 (левый сосед 1 -2 и левого соседа 5 также -2) ; для второго - 8; для третьего - 3; для четвёртого это снова 8.
Я хочу сделать это без петель, так что я пробовал с sum()
и which()
как в Conditional Sum in R, но не может найти путь до конца.
Это прекрасно работает , но я не понимаю, как это сделать. Что делает оператор '*'? – Joe
@Joe Это оператор умножения, который преобразует соответствующие значения в 0 для FALSE в другой логической матрице – akrun