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