我试图用NA
函数替换regex
,如gsub
-
样本数据-
a<-c(NA,1:5,NA,NA,1:3, rep(NA,round(runif(1,0,100))))
如何识别NA
匹配领域的pattern
。
例如,gsub("identify NA", 0, a)
注意 - 我知道替换NA
的其他方法,但我试图使用NA
识别regex
。
编辑 - 我的意图是要理解为什么正则表达式不识别NA
?
正如其他人所指出的那样,不要使用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
不要使用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>
在这里,我们只需通过a
索引矢量is.na(a)
,为了简单起见,只需为这些值指定一个新值即可。
简而言之,不要混淆在打印实际NA
值时显示的“文本”NA
与NA
的条件。