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

问题描述 投票:0回答:2

我试图用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

r na
2个回答
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

8
投票

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

Example

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值时显示的“文本”NANA的条件。

© www.soinside.com 2019 - 2024. All rights reserved.