5

给定输入向量 (iv)

iv <- c(.10,.15,"hello","."," . ",". ")

我正在使用:

out <- sub(regexp,NA,iv)

我想要这样的输出向量:

.10,.15,"hello",NA,NA,NA

但是,不知道如何形成正则表达式来获得我需要的东西。提前致谢。

4

4 回答 4

4

您正在寻找的是negative lookahead正则表达式。您要检查.后面是否有 anumber (0-9)并将其替换为NA. 如果这个逻辑是你想要的,那么它可以在 1 行中实现如下:

gsub("\\.(?![0-9])", NA, iv, perl=T)
# [1] "0.1"   "0.15"  "hello" NA      NA      NA     

逻辑:搜索后面没有数字的点并将其替换为NA

于 2013-02-24T09:50:03.527 回答
3

如果你想用NAthen 替换这些值,你将需要使用某种形式的赋值运算符。

一个简单的方法:

 iv[gsub(" ", "", iv)=="."] <- NA

快速解释:

如果要替换的字符串都相同(即"."),那么您可以简单地调用 iv[ iv=="."] <- NA.

但是,为了捕捉所有多余的空格,您可以搜索无数的“。” 确保排除.10,.15等的组合,或者您可以删除所有空格,然后您可以使用更简单的情况==

顺便说一句,如果你想在 R 的正则表达式中搜索一个句点,你需要转义正则表达式的句点\.,然后你需要转义R,\\.


编辑:请注意,上面的行不会永久删除iv. 看一下gsub(" ", "", iv)=="." 这会返回一个 T/F 向量,该向量又被用于过滤iv. 除NA数值外,iv保持不变。

编辑#2: 如果您希望将更改保存到不同的向量,您可以使用以下内容:

 out <- iv
 out[gsub(" ", "", iv)=="."] <- NA
于 2013-02-24T08:26:12.643 回答
2
  gsub('^\\s*[.]\\s*$', 'NA',c(.10,.15,"hello","."," . ",". "))
  [1] "0.1"   "0.15"  "hello" "NA"    "NA"    "NA"   

编辑将“ NA”替换为NA

 gsub('^\\s*[.]\\s*$', NA,c(.10,.15,"hello","."," . ",". "))
[1] "0.1"   "0.15"  "hello" NA      NA      NA     

编辑使用stringr

library(stringr)
x <- c(.10,.15,"hello","."," . ",". ")
x[str_trim(x) == '.'] <- NA
x
[1] "0.1"   "0.15"  "hello" NA      NA      NA     
于 2013-02-24T08:37:20.707 回答
-1

正则表达式:

       "^ *\. *$"
于 2013-02-24T08:20:12.137 回答