用NA替换<na> </na>

时间:2014-10-06 16:46:54

标签: r replace na

我有一个包含条目的数据框;似乎这些值不被视为NA,因为is.na返回FALSE。我想将这些值转换为NA但无法找到方法。

3 个答案:

答案 0 :(得分:3)

使用dfr[dfr=="<NA>"]=NA dfr是您的数据框。

例如:

> dfr<-data.frame(A=c(1,2,"<NA>",3),B=c("a","b","c","d"))

> dfr
     A  B
1    1  a
2    2  b
3 <NA>  c
4    3  d

> is.na(dfr)
         A     B
[1,] FALSE FALSE
[2,] FALSE FALSE
[3,] FALSE FALSE
[4,] FALSE FALSE

> dfr[dfr=="<NA>"] = NA                 **key step**

> is.na(dfr)
         A     B
[1,] FALSE FALSE
[2,] FALSE FALSE
[3,]  TRUE FALSE
[4,] FALSE FALSE

答案 1 :(得分:1)

这可能是一个问题的两个类是字符和因素。这应该遍历一个dtaframe并将“NA”值转换为真正的<NA>,但仅适用于这两个类:

make.true.NA <- function(x) if(is.character(x)||is.factor(x)){
                                  is.na(x) <- x=="NA"; x} else {
                                  x}
df[] <- lapply(df, make.true.NA)

(在没有数据示例的情况下未经测试。)使用表单:df_name[]将尝试保留原始数据帧的结构,否则将失去其类属性。我看到ujjwal认为你的NA拼写有侧翼“&lt;&gt;”字符,所以你可以尝试这个函数更一般:

make.true.NA <- function(x) if(is.character(x)||is.factor(x)){
                                  is.na(x) <- x %in% c("NA", "<NA>"); x} else {
                                  x}

答案 2 :(得分:0)

您也可以使用replace_with_na包,使用dfr <- data.frame(A = c(1, 2, "<NA>", 3), B = c("a", "b", "c", "d")) library(naniar) # dev version - devtools::install_github('njtierney/naniar') is.na(dfr) #> A B #> [1,] FALSE FALSE #> [2,] FALSE FALSE #> [3,] FALSE FALSE #> [4,] FALSE FALSE dfr %>% replace_with_na(replace = list(A = "<NA>")) %>% is.na() #> A B #> [1,] FALSE FALSE #> [2,] FALSE FALSE #> [3,] TRUE FALSE #> [4,] FALSE FALSE # You can also specify how to do this for many variables dfr %>% replace_with_na_all(~.x == "<NA>") #> # A tibble: 4 x 2 #> A B #> <int> <int> #> 1 2 1 #> 2 3 2 #> 3 NA 3 #> 4 4 4 和相关功能来执行此操作。


replace_with_na

您可以详细了解如何使用Error: Cannot enqueue Quit after invoking quit naniar