检查字符串是否包含R中的所有空格

Kas*_*rah 4 string whitespace r

我想看一个字符串是否只包含空格.字符串可以是

"  "
Run Code Online (Sandbox Code Playgroud)

要么

"           "
Run Code Online (Sandbox Code Playgroud)

要么

"              " 
Run Code Online (Sandbox Code Playgroud)

等等...

我想这样做,所以我可以将数据框中的值更改为NA,因为我的目标是修复/清理混乱的数据.

谢谢

Cat*_*ath 10

您可以尝试grepl:

grepl("^\\s*$", your_string)
Run Code Online (Sandbox Code Playgroud)

"^\\s*$"在string的begin()和end()之间请求0或更多(*)的空格(\\s).^$

例子

grepl("^\\s*$", " ")
#[1] TRUE
grepl("^\\s*$", "")
#[1] TRUE
grepl("^\\s*$", "    ")
#[1] TRUE
grepl("^\\s*$", " ab")
[1] FALSE
Run Code Online (Sandbox Code Playgroud)

注意:您也可以使用空格而不是\\s正则表达式("^\\s*$").

  • @Seekheart它实际上是为什么我首选`*`所以它也检查空字符串,我认为OP可能也想要发现空字符串(并进一步修改为'NA`)(顺便说一下,你的不行指定字符串的开头和结尾,你不需要perl选项,TRUE必须用大写写;-)) (4认同)
  • 更好的正则表达式是 `grepl("\\s+", your_string, perl = True)`,+ 强制它再匹配 1 个空格。 (2认同)

RHe*_*tel 6

没有正则表达式,你可以使用

which(nchar(trimws(vec))==0)
Run Code Online (Sandbox Code Playgroud)

该函数trimws()从字符串中删除尾随和前导空白字符.因此,如果在使用trimws字符串的长度(由...确定nchar())不为零之后,该字符串包含至少一个非空白字符.

例:

vec <- c(" ", "", "   "," a  ", "             ", "b")
which(nchar(trimws(vec))==0)
#[1] 1 2 3 5
Run Code Online (Sandbox Code Playgroud)

向量的条目1,2,3和5 vec是空的或仅包含空格字符.


正如Richard Scriven所建议的那样nchar(),通过简单地使用trimws(vec)==""(或者which(trimws(vec)==""),取决于期望的输出:前者导致布尔值的向量,后者在空白/空条目的索引号中),可以在不调用的情况下获得相同的结果.