Как заменить NA строкой, основанной на условии в R?

#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)
  ))