我想查看一个字符串是否只包含空格。该字符串可能是:
" "
or
" "
或者
" "
我希望能够更改数据框中的值为NA,因为我的目标是修复/清理混乱的数据。
谢谢
我想查看一个字符串是否只包含空格。该字符串可能是:
" "
or
" "
" "
谢谢
你可以尝试使用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*$"
)。
没有使用正则表达式,你可以使用
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()
来获得相同的结果。
grepl("\\s+", your_string, perl = True)
,加号强制匹配一个或多个空格。 - Seekheart*
的原因,因为它也会检查空字符串,我认为原帖作者可能也希望发现空字符串(并进一步修改为NA
)(顺便说一句,如果不指定字符串的开头和结尾,你的方法是行不通的,你不需要使用 perl 选项,而且 TRUE 必须用大写字母;-))。 - Cath