Мне нужно открыть новый ответ, так как у меня недостаточно репутации, чтобы комментировать ответ akrun.
Функция ifelse делает то, что вы ищете.
Ошибка, которую вы получаете, заключается в том, что if ищет единственное значение, как указано выше, но вы передаете вектор.
Вот небольшой пример:
a <- c(NA, 1, NA, 0)
if(is.na(a)){}
# NULL
# Warning message:
# In if (is.na(a)) { :
# the condition has length > 1 and only the first element will be used
Если вы вместо этого написали
result <- rep(NA, 4)
for(i in 1:length(a)){
if(is.na(a[i])){
result[i] <- 1
} else {
result[i] <- 0
}
}
result
# [1] 1 0 1 0
вы не получите ошибку, потому что вы используете только единичные значения с if ().
Теперь вместо использования цикла for и предложения if () else () вы можете просто использовать векторизованную функцию ifelse (), как предложено выше. Для каждого элемента вектора Enrollment_Report $ lon он проверяет, является ли оно значением NA, и если да, то применяет функцию mutate_geocode к Enrollment_Report $ facility_city, а если нет, он просто возвращает город обслуживания.
Enrollment_Report2 <- ifelse(is.na(Enrollment_Report$lon), mutate_geocode(Enrollment_Report$facility_city), Enrollment_Report$facility_city)
Это векторизованная версия if () {} else () {}.