Проблема в том, что if_else
более строг, чем базовый R ifelse
. От help("if_else")
:
Описание
По сравнению с базовым ifelse () эта функция более строгая. Он проверяет, что true и false имеют одинаковый тип. Эта строгость делает тип вывода более предсказуемым и делает его несколько быстрее.
И в разделе Аргументы:
true, false
Значения, используемые для TRUE
и FALSE
значения условия. Они должны быть одинаковой длины с условием или длиной 1. Они также должны быть одного типа: if_else()
проверяет, имеют ли они одинаковый тип и класс. Все остальные атрибуты взяты из true.
Итак, чтобы выполнить инструкцию mutate
в вопросе, приведите true и false к одному и тому же классу.
В качестве примечания я будет воссоздавать набор данных, поскольку as.data.frame
не требуется, правильный способ - использовать data.frame
.
library(dplyr)
a <- factor(c("31","32","43","36","35","46","<31"))
df <- data.frame(a)
mutate(df, b = as.numeric(if_else(a == "<31", "30", as.character(a))))
# a b
#1 31 31
#2 32 32
#3 43 43
#4 36 36
#5 35 35
#6 46 46
#7 <31 30