Эта проблема связана с тем, как R обрабатывает векторизованные операции, поскольку первый аргумент вашего оператора ifelse
возвращает логическую длину 1 (поскольку sum(df$Col2) > 0
может возвращать только True
, False
или NA
), только одно из значений используется в других.
Вот пример того, что происходит
> ifelse(TRUE, 1:4, 1:4)
[1] 1
> ifelse(c(TRUE, TRUE, FALSE, FALSE), 1:4, 1:4)
[1] 1 2 3 4
Таким образом, ваш пример будет исправлен путем изменения синтаксиса как такового
if (sum(df$Col2)>0) {
df$Col2 <- df$Spend
} else {
df$Col2 <- ifelse(df$Col1!="A", df$Spend, df$Col2)
}
А если ДЕЙСТВИТЕЛЬНО ХОТИТЕ однострочник
df$Col2 <- ifelse(rep(sum(df$Col2)>0, nrow(df)), df$Spend, ifelse(df$Col1!="A", df$Spend, df$Col2))