在R中检查一个字符串是否全部为空格字符

9

我想查看一个字符串是否只包含空格。该字符串可能是:

"  "

or

"           "

或者
"              " 

我希望能够更改数据框中的值为NA,因为我的目标是修复/清理混乱的数据。

谢谢

2个回答

15

你可以尝试使用grepl

grepl("^\\s*$", your_string)

"^\\s*$"表示字符串的开头和结尾之间有0个或多个空格 (\\s)。

示例

grepl("^\\s*$", " ")
#[1] TRUE
grepl("^\\s*$", "")
#[1] TRUE
grepl("^\\s*$", "    ")
#[1] TRUE
grepl("^\\s*$", " ab")
[1] FALSE

NB: 在正则表达式中,你也可以用空格代替\\s"^\\s*$")。


1
更好的正则表达式应该是 grepl("\\s+", your_string, perl = True),加号强制匹配一个或多个空格。 - Seekheart
4
@Seekheart,这实际上是我更喜欢使用 * 的原因,因为它也会检查空字符串,我认为原帖作者可能也希望发现空字符串(并进一步修改为 NA)(顺便说一句,如果不指定字符串的开头和结尾,你的方法是行不通的,你不需要使用 perl 选项,而且 TRUE 必须用大写字母;-))。 - Cath

12

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

which(nchar(trimws(vec))==0)

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

示例:

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

vec的第1、2、3和5个元素要么为空,要么只包含空格字符。


正如Richard Scriven所建议的那样,可以通过简单地使用trimws(vec)==""(或which(trimws(vec)==""),具体取决于所需的输出:前者结果为布尔向量,后者则为空/空白条目的索引号)而不调用nchar()来获得相同的结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接