if_else
чувствительно к типу.У нас может быть только один class
.Таким образом, параметры true
и false
должны быть одинаковыми class
.В коде ОП один numeric
, а другой character
.
df %>%
mutate(bar = if_else(!is.na(as.numeric(bar)),
as.character(as.numeric(bar)/100), bar))
Примечание. Обычный ifelse
(base R
) по-прежнему будет работать без изменения типа
Другой вариант - отфильтровать элементы, имеющие только числовые значения ипреобразовать его в numeric
и выполнить деление
i1 <- grep("^[0-9.]+$", df$bar) # or the is.na(as.numeric route
df$bar[i1] <- as.numeric(df$bar[i1])/100