如何根据R中的条件用字符串替换NA?

问题描述

我有以下数据:

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...