【发布时间】:2016-03-04 06:04:47
【问题描述】:
考虑向量
v<- 'I l@ove d**^%ata 33-99//""(Sci"ence==+)'
我想在 R 中使用 gsub 作为清理它
"I Love Data Science"
任何帮助将不胜感激。
【问题讨论】:
考虑向量
v<- 'I l@ove d**^%ata 33-99//""(Sci"ence==+)'
我想在 R 中使用 gsub 作为清理它
"I Love Data Science"
任何帮助将不胜感激。
【问题讨论】:
这是一个显式替换仅出现在输入向量中的特殊字符的选项:
chars <- c("@", "*", "^", "%", "/", "\"", "=", "+", "d", "(", ")", "-")
gsub(paste("\\", chars, sep="", collapse="|"), "", statement)
[1] "I love data Science"
请注意,我将 chars 中的每个字符转义为 \\,以防它是 R 正则表达式元字符(如果不是,则不会造成任何伤害)。
@akrun 给出的答案更简洁,如果一个广泛的字符类涵盖了您想要替换的内容,那么这就是要走的路。我希望这个答案对需要替换一组不完全适合类的单个字符的人有用。
【讨论】:
我们匹配一个或多个不是字母或空格的字符,并将其替换为''。 [[:alpha:]]+ 本身匹配一个或多个字母字符。但是,假设我们需要做相反的事情,即匹配一个或多个不是字母的字符,使用[^[:alpha:]]+,即在第一个[ 中使用^ 否定匹配。这里我们还需要空格。没有它,我们得到"IlovedataScience"。所以,在比赛中也使用它,即[^[:alpha:] ]+。
gsub("[^[:alpha:] ]+", "", v1)
#[1] "I love data Science"
或者使用[[:punct:]]匹配任何标点字符并替换为''
gsub("[[:punct:]]+|[0-9]+", '', v1)
或者代替[[:alpha:]],我们可以将字母指定为[A-Za-z](正如@alistaire 评论的那样)
gsub('[^A-Za-z ]', '', v1)
如果 OP 希望每个单词的首字母大写,
gsub("\\b(.)", "\\U\\1", gsub('[^A-Za-z ]', '', v1), perl=TRUE)
#[1] "I Love Data Science"
v1 <- 'I l@ove d**^%ata 33-99//""(Sci"ence==+)'
【讨论】:
gsub('[^A-Za-z ]', '', v1)