Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我希望grep/gsub为空,空格和连字符,并用R中的NA替换_R - Fatal编程技术网

我希望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字符。