在数据框中,如何仅用“ NA”替换协调诸如“不适用”,“不适用”,“未知”之类的值?

问题描述

我正在使用具有1000s列的df(一些列包含数字值,一些包含字符,而一些逻辑)以及df conatins值,例如“不适用”,“未知”,“未确定”等。我要用“ NA”替换所有这些值吗?

  1. 我尝试了以下代码,它输出空单元格,而不是替换为“ NA”。 na_string df%>%replace_with_na_all(条件=〜.x%in%na_string)

  2. 我还使用了naniar软件包 df%>%replace_with_na_all(condition =〜.x%in%common_na_strings)

  3. 我还尝试过使用 df一次替换它们或也已使用 df [df ==“ Not Available”] 并尝试了此方法** df%>% mutate_if(is.character,list(〜na_if(。,“ Not Available”))) **

要么我获取了空单元格来代替那些值,要么它根本不会替代任何内容。我在这里想念什么?

解决方法

在使用NA读取数据集时,我们可以将其更改为na.strings,这不涉及任何外部包。最好在阅读时进行更改,而不要事后更改。

df <- read.csv('file.csv',na.strings = na_string)

如果我们想在阅读后将其更改为NA

df[] <- lapply(df,function(x) replace(x,x %in% na_string,NA))

或与tidyverse

library(dplyr)
df %>%
    mutate(across(everything(),~ na_if(.,. %in% na_string)))
,

您可以尝试在across中使用dplyr

library(dplyr)
na_string <- c("NA","Not_Applicable","[Not Available]","[Not Applicable]","[Unknown]","[Not Evaluated]")

df <- df %>% mutate(across(.fns = ~replace(.,.%in% na_string,NA)))

或者,如果您使用的是dplyr的旧版本,则可以使用mutate_all

df <- df %>% mutate_all(~replace(.,NA))

在基数R中,您可以尝试:

df[sapply(df,`%in%`,na_string)] <- NA

请注意,na_string中的值必须与数据中的值完全匹配。因此"Not Available""[Not Available]"不同。