用R中的NA替换文本

时间:2019-02-16 02:21:49

标签: r replace tidyverse

我在数据框PC_R中有一个变量jd_df,用于描述实验室测试结果。我想用NA替换此变量中的某些数据(例如tf,QNS,rej)。我已经尝试过以下代码:

 jd_df %>%
  replace(PC_R,TF,NA)

还有:

jd_df %>%
  replace(jd_df,PC_R==TF,NA)    

这:

jd_df %>%
  replace(PC_R,"TF","NA")

这:

jd_df %>%
  replace(jd_df,PC_R%in%TF,NA)

我不断收到错误消息:

Error in replace(., jd_df, PC_R %in% TF, NA) : unused argument (NA)

我想知道替换命令是否不可行。

3 个答案:

答案 0 :(得分:1)

您可以使用case_when实现此目的,如下面的虹膜数据集所示

library(dplyr)
iris <- iris %>% 
  mutate(Species = as.character(Species)) %>% 
  mutate(Species = case_when(
    Species == "setosa" ~ NA_character_, 
    TRUE ~ Species
  ))

可以这样指定多个更改:

iris %>% 
  mutate(Species = as.character(Species)) %>% 
  mutate(Species = case_when(
    Species == "setosa" | Species == "versicolor" ~ NA_character_, 
    TRUE ~ Species
  ))

reprex package(v0.2.0)于2019-02-16创建。

答案 1 :(得分:0)

我发现这可以将多个字符文本更改为NA:

jd_df %>% mutate(PC_R = replace(PC_R, PC_R %in% "TF"|PC_R %in% "tf"|PC_R %in% "rej",NA))

答案 2 :(得分:0)

上面的case_when()答案很有效!更简单的替代方法是na_if()函数,该函数用NA替换指定的字符串。因此:

library(dplyr)
iris %>%
  mutate(Species = na_if(Species, "setosa")) 

这会将setosa列中的NA的所有实例更改为Species。在您的情况下,可能是:

jd_df %>%
  mutate(PC_R = na_if(PC_R, "TF"))

将所有"TF"替换为NA。您可以根据需要重复代码以捕获所有预期的NA值:

jd_df %>%
  mutate(PC_R = na_if(PC_R, "TF"),
         PC_R = na_if(PC_R, "QNS"),
         PC_R = na_if(PC_R, "rej"))