我正在尝试使用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
?
答案 0 :(得分:8)
请勿使用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
。
答案 1 :(得分:3)
正如其他人指出的那样,请勿使用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