为什么像 R 中的 gsub() 这样的正则表达式函数不能识别 NA?

Why regex functions like gsub() in R doesn't identify NA?

我正在尝试使用 regex 函数替换 NA,例如 gsub -

示例数据-

a<-c(NA,1:5,NA,NA,1:3, rep(NA,round(runif(1,0,100))))

如何在 pattern 匹配字段中识别 NA

例如- gsub("identify NA", 0, a)

注意 - 我知道其他方法可以替换 NA,但我正在尝试使用 regex 来识别 NA

编辑-我的目的是了解,为什么正则表达式不能识别 NA

不要使用 gsub() 或其他 reg.exp 函数 -- NA 已经可以识别 所以使用 is.na()

例子

R> a<-c(NA,1:5,NA,NA,1:3, rep(NA,round(runif(1,0,100))))
R> a
 [1] NA  1  2  3  4  5 NA NA  1  2  3 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[30] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
R> a[is.na(a)] <- 42
R> a
 [1] 42  1  2  3  4  5 42 42  1  2  3 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42
[30] 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42
R> 

这里我们简单地通过 is.na(a) 索引向量 a 并且为了简单起见,只需为这些值分配一个新值。

简而言之,不要将打印实际 NA 值时显示的 "text" NANA.

的条件混淆

正如其他人所指出的,不要使用 gsub。您可以使用 tidyr 包中的 replace_na 函数。

library(tidyr)
a<-c(NA,1:5,NA,NA,1:3, rep(NA,round(runif(1,0,100))))
replace_na(a, 0)
# [1] 0 1 2 3 4 5 0 0 1 2 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 #0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 # 0 0 0 0 0 0
# [84] 0 0 0 0 0 0 0