#r #if-statement #dplyr #replace #na
Вопрос:
У меня есть следующие данные:
name <- c(NA, NA)
code <- c("KSV", "KSV")
testing_data <- cbind.data.frame(name, code)
Для всего кода == «KSV» я хочу заменить NA на «Косово». Любая помощь будет признательна.
Комментарии:
1. изменить: Я хочу заменить NAs в столбце «имя», извините, что не указал ранее.
Ответ №1:
Вы можете использовать ifelse()
и replace_na()
library(tidyr)
library(dplyr)
testing_data %>% mutate(name=ifelse(code=='KSV', replace_na(name, 'Kosovo'), name))
Немного более простая версия с case_when()
:
testing_data %>% mutate(name=case_when(code=='KSV' ~replace_na(name, 'Kosovo')))
Ответ №2:
Базовый вариант R с использованием replace
transform(
testing_data,
name = replace(name,code == "KSV" amp; is.na(name),"Kosovo")
)
или ifelse
transform(
testing_data,
name = ifelse(code == "KSV" amp; is.na(name), "Kosovo",name)
)
дает
name code
1 Kosovo KSV
2 Kosovo KSV
Ответ №3:
Вы можете использовать следующий код:
library(dplyr)
testing_data %>%
mutate(name = ifelse(is.na(name) amp; code == "KSV", "Kosovo", name))
name code
1 Kosovo KSV
2 Kosovo KSV
или в качестве альтернативы с case_when
:
testing_data %>%
mutate(name = case_when(
is.na(name) amp; code == "KSV" ~ "Kosovo",
TRUE ~ as.character(name)
))