Условная сумма на основе индикатора
У меня есть такой фрейм данных:
A B Ind
1 10 8 1
2 9 10 2
3 7 1 2
4 19 20 1
5 . . .
Как я могу суммировать столбцы на основе значения Ind
? If Ind==1
, sum from column A
, if Ind==2
, sum from column B
. Например, выходные данные для первых 4 строк должны быть 10+10+1+19=30
, где первые 10 - в A
, вторые 10 - в B
, третьи 1-в B
и четвертые 19-в A
.
3 ответа:
Предполагая ваши данные.фрейм называется "mydf", вы можете использовать
ifelse
следующим образом:sum(with(mydf, ifelse(Ind == 1, A, B)))
Вот результат части
ifelse
:Конечно, если у вас есть более одного условия, вы можете вложить их по мере необходимости.> with(mydf, ifelse(Ind == 1, A, B)) [1] 10 10 1 19
Вот более подробная альтернатива, которая использует базовое подмножество:
sum(with(mydf, c(mydf[Ind == 1, "A"], mydf[Ind == 2, "B"])))