我有一个包含条目的数据框;由于is.na返回FALSE,因此这些值似乎没有被视为NA。我想将这些值转换为NA,但找不到方法。
发布于 2014-10-07 03:03:19
这可能成为问题的两个类别是字符和因素。这应该在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)(在没有数据示例的情况下未进行测试。)使用form:df_name[]将尝试保留原始数据帧的结构,否则将丢失其类属性。我发现ujjwal认为您的NA拼写包含"<>“字符,因此您可以尝试使用更通用的函数:
make.true.NA <- function(x) if(is.character(x)||is.factor(x)){
is.na(x) <- x %in% c("NA", "<NA>"); x} else {
x}发布于 2014-10-07 03:25:56
使用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发布于 2018-01-19 11:34:11
您也可以使用replace_with_na和相关函数对naniar包执行此操作。
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 here的详细信息
https://stackoverflow.com/questions/26220913
复制相似问题