我有一个字符串向量:
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
关于r - gsub 的否定 |替换某个向量中除字符串之外的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49252888/