Если у меня есть такой вектор с пустыми элементами:
vec_empty_element <- c("z", "a", "", "")
Затем у меня есть еще один такой вектор, который всегда будет одинаковой длины:
needed_names <- c("x + y", "x/2", "y", "x")
Как заменить пустой элемент в vec_empty_element
значением из needed_names
, которое находится в той же позиции?
Вот что я хотел получить в итоге:
desired_vec <- c("z", "a", "y", "x")
Один из вариантов — преобразовать пустое (""
в NA
, а затем coalesce
library(dplyr)
coalesce(na_if (vec_empty_element, ""), needed_names)
[1] "z" "a" "y" "x"
или в base R
с ifelse
ifelse(nzchar(vec_empty_element), vec_empty_element, needed_names)
[1] "z" "a" "y" "x"
Использование nzchar
:
vec_empty_element <- c("z", "a", "", "")
needed_names <- c("x + y", "x/2", "y", "x")
vec_empty_element[!nzchar(vec_empty_element)] <- needed_names[!nzchar(vec_empty_element)]
# [1] "z" "a" "y" "x"
Вы также можете использовать простой индекс:
vec_empty_element[vec_empty_element == ""] <- needed_names[vec_empty_element == ""]
#[1] "z" "a" "y" "x"
Или с ifelse
vec_empty_element <- ifelse(vec_empty_element == "", needed_names, vec_empty_element)