【问题标题】:How to replace NA with a string based on a condition in R?如何根据 R 中的条件用字符串替换 NA?
【发布时间】:2021-10-07 04:31:29
【问题描述】:

我有以下数据:

name <- c(NA, NA)
code <- c("KSV", "KSV")
testing_data <- cbind.data.frame(name, code) 

对于所有代码 == "KSV",我想将 NA 替换为 "Kosovo"。任何帮助将不胜感激。

【问题讨论】:

  • 编辑:我想替换“名称”列中的 NA,抱歉之前没有指定。

标签: r if-statement dplyr replace na


【解决方案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】:

    使用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
    

    【讨论】:

      【解决方案3】:

      您可以使用以下代码:

      library(dplyr)
      
      testing_data %>%
        mutate(name = ifelse(is.na(name) & code == "KSV", "Kosovo", 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)
        ))
      

      【讨论】:

        猜你喜欢
        • 2023-02-13
        • 2021-06-19
        • 1970-01-01
        • 2018-12-29
        • 2013-11-19
        • 1970-01-01
        • 2015-05-06
        • 2021-10-19
        • 2016-08-29
        相关资源
        最近更新 更多