我希望grep/gsub为空,空格和连字符,并用R中的NA替换
我有以下数据,我希望grep/gsub为空,空格和连字符,并用R中的NA替换,r,R,我有以下数据, a <- c('a','1','',' ','-') a您可以这样做来确定并替换查询 gsub("-|\\s+|^$",NA,a) 逻辑: gsub将用NA替换该模式,该模式表示,如果作为输入的“a”包含任何破折号(-),或一个或多个空格(\s+)或任何缺失字符(^$)的多次出现,则应替换该模式 \\s表示正则表达式中的空格 +表示一个或多个字符 ^表示开始 $表示字符串的结尾 管道符号在正则表达式中是或(|) 因此,\\s+在这里表示一个或多个空格,^$在一起表示
a <- c('a','1','',' ','-')
a您可以这样做来确定并替换查询
gsub("-|\\s+|^$",NA,a)
逻辑:
gsub
将用NA替换该模式,该模式表示,如果作为输入的“a”包含任何破折号(-),或一个或多个空格(\s+)或任何缺失字符(^$)的多次出现,则应替换该模式
\\s
表示正则表达式中的空格
+
表示一个或多个字符
^
表示开始
$
表示字符串的结尾
- 管道符号在正则表达式中是或(
|
)
因此,\\s+
在这里表示一个或多个空格,^$
在一起表示开始和结束在一起,这表明它们之间没有任何区别,破折号可以按原样取。这里所有这些特殊含义都是使用管道(|
)、或操作符组合而成的
您可以通过在R终端中键入help(regex)
或?regex
来深入了解详细含义
输出:
#> gsub("-|\\s+|^$",NA,a)
#[1] "a" "1" NA NA NA
为什么我们需要一个“+”,即使没有“+”它也能工作。你能澄清一下吗?有趣的是,gsub
并没有将NA
转换成两个字符串“NA”
,而是转换成这里需要的NA\u字符。