R 替换<;NA>;与NA

R 替换<;NA>;与NA,r,replace,na,R,Replace,Na,我有一个包含条目的数据框;由于is.NA返回FALSE,因此这些值似乎未被视为NA。我想将这些值转换为NA,但找不到方法 这可能是一个问题的两类是性格和因素。这应该在数据帧上循环,并将“NA”值转换为true,但仅适用于这两个类: make.true.NA <- function(x) if(is.character(x)||is.factor(x)){ is.na(x) <- x=="NA"; x} else {

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

这可能是一个问题的两类是性格和因素。这应该在数据帧上循环,并将“NA”值转换为true
,但仅适用于这两个类:

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)
使用
dfr[dfr==“”]=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
>dfr-dfr
A B
11A
2 b
3 c
三维
>is.na(dfr)
A B
[1,]假
[2,]假
[3,]假
[4,]假
>dfr[dfr==“”]=NA**关键步骤**
>is.na(dfr)
A B
[1,]假
[2,]假
[3,]对错
[4,]假
您也可以使用软件包执行此操作,方法是使用
将_替换为_na
和相关函数


dfr A B
#>[1,]假
#>[2,]假
#>[3,]假
#>[4,]假
dfr%%>%将_替换为_-na(替换=列表(A=”“)%%>%is.na()
#>A B
#>[1,]假
#>[2,]假
#>[3,]对错
#>[4,]假
#您还可以为许多变量指定如何执行此操作
dfr%>%将_替换为_na_all(~.x==“”)
#>#tibble:4 x 2
#>A B
#>    
#> 1     2     1
#> 2     3     2
#>3 NA 3
#> 4     4     4

你可以阅读更多关于使用
replace_with_na

的内容,我猜你是说用R来做这件事吧?否则,na是相当模糊的。。。北美?不可用?是,对不起,在R;NA代表缺少的值为您的问题添加
dput(您的.data.frame[some.rows.that.contain.such.values,])
的输出,提供一个数据示例。
str(your.data.frame)
的结果也将有助于我们查看列的存储方式。感谢您的帮助。问题是,我无法制作一个可复制的示例,在该示例中,我获得了NA和。BondedDust函数允许我转换NA和真NA(它们在is.NA(df)中看起来都是真的),但是我的df的结构表明,包含条目的变量被编码为因子而不是数字。我怀疑您不想将所有字符向量转换为数字,因此您可能只想将此转换应用于特定列:
dfrm[targets]是的,我必须转换为数字,但它只有在首先取消列出数据帧时才有效。我不知道为什么它会显示为列表,但至少它是可以的。
> 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