gsub | 的否定替换特定向量中除字符串以外的所有内容
Negation of gsub | Replace everything except strings in a certain vector
我有一个字符串向量:
ve <- c("N","A","A","A","N","ANN","NA","NFNFNAA","23","N","A","NN", "parnot", "important", "notall")
我只想在此向量中保留三个可能的值:N
、A
和 NA
。
因此,我想将任何不是 N
或 A
的元素替换为 NA
。
我怎样才能做到这一点?
我尝试了以下方法:
gsub(ve, pattern = '[^NA]+', replacement = 'NA')
gsub(ve, pattern = '[^N|^A]+', replacement = 'NA')
但是这些效果不佳,因为它们将每个字符串中的每个 "A" 或 "N" 实例替换为 NA。所以在某些情况下,我最终会得到 NANANANANANA
,而不是简单的 NA
.
使用否定先行断言。
ve <- c("N","A","A","A","N","ANN","NA","NFNFNAA","23","N","A","NN", "parnot", "important", "notall")
sub("^(?![NA]$).*", "NA", ve, perl=T)
# [1] "N" "A" "A" "A" "N" "NA" "NA" "NA" "NA" "N" "A" "NA" "NA" "NA" "NA"
^(?![NA]$)
断言
-> 开始后 ^
应该只有一个字母 [NA]
N
或 A
后跟行尾 $
.
.*
匹配所有字符
这样上面的正则表达式将匹配任何字符串,除了 N
或 A
如果我们正在寻找固定的匹配项,则使用 %in%
和否定 !
并将其分配给 'NA'
ve[!ve %in% c("A", "N", "NA")] <- 'NA'
请注意,在 R
中,缺失值未加引号 NA
且未加引号。希望它是一个不同的类别,并建议将类别名称更改为不同的名称以避免将来在解析时造成混淆
这是一个替代的正则表达式解决方案
ve[!grepl("^[N|A]$", ve)] <- NA_character_
您仍然可能应该采用 Akrun 的解决方案。
我有一个字符串向量:
ve <- c("N","A","A","A","N","ANN","NA","NFNFNAA","23","N","A","NN", "parnot", "important", "notall")
我只想在此向量中保留三个可能的值:N
、A
和 NA
。
因此,我想将任何不是 N
或 A
的元素替换为 NA
。
我怎样才能做到这一点?
我尝试了以下方法:
gsub(ve, pattern = '[^NA]+', replacement = 'NA')
gsub(ve, pattern = '[^N|^A]+', replacement = 'NA')
但是这些效果不佳,因为它们将每个字符串中的每个 "A" 或 "N" 实例替换为 NA。所以在某些情况下,我最终会得到 NANANANANANA
,而不是简单的 NA
.
使用否定先行断言。
ve <- c("N","A","A","A","N","ANN","NA","NFNFNAA","23","N","A","NN", "parnot", "important", "notall")
sub("^(?![NA]$).*", "NA", ve, perl=T)
# [1] "N" "A" "A" "A" "N" "NA" "NA" "NA" "NA" "N" "A" "NA" "NA" "NA" "NA"
^(?![NA]$)
断言
-> 开始后 ^
应该只有一个字母 [NA]
N
或 A
后跟行尾 $
.
.*
匹配所有字符
这样上面的正则表达式将匹配任何字符串,除了 N
或 A
如果我们正在寻找固定的匹配项,则使用 %in%
和否定 !
并将其分配给 'NA'
ve[!ve %in% c("A", "N", "NA")] <- 'NA'
请注意,在 R
中,缺失值未加引号 NA
且未加引号。希望它是一个不同的类别,并建议将类别名称更改为不同的名称以避免将来在解析时造成混淆
这是一个替代的正则表达式解决方案
ve[!grepl("^[N|A]$", ve)] <- NA_character_
您仍然可能应该采用 Akrun 的解决方案。