问题描述
我有以下数据:
name <- c(NA,NA)
code <- c("KSV","KSV")
testing_data <- cbind.data.frame(name,code)
对于所有代码==“KSV”,我想用“Kosovo”替换NA。任何帮助将不胜感激。
解决方法
您可以使用 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')))
,
使用 replace
的基本 R 选项
transform(
testing_data,name = replace(name,code == "KSV" & is.na(name),"Kosovo")
)
或 ifelse
transform(
testing_data,name = ifelse(code == "KSV" & is.na(name),"Kosovo",name)
)
给予
name code
1 Kosovo KSV
2 Kosovo KSV
,
您可以使用以下代码:
library(dplyr)
testing_data %>%
mutate(name = ifelse(is.na(name) & code == "KSV",name))
name code
1 Kosovo KSV
2 Kosovo KSV
或作为 case_when
的替代:
testing_data %>%
mutate(name = case_when(
is.na(name) & code == "KSV" ~ "Kosovo",TRUE ~ as.character(name)
))