R:在字符串中显示匹配的特殊字符

问题描述 投票:0回答:2

如何显示单列数据帧的每一行中匹配的是哪个特殊字符?

示例数据框:

a <- data.frame(name=c("foo","bar'","ip_sum","four","%23","2_planet!","@abc!!"))

确定字符串是否具有特殊字符:

a$name_cleansed <- gsub("([-./&,])|[[:punct:]]","\\1",a$name) #\\1 puts back the exception we define (dash and slash)

a <- a %>% mutate(has_special_char=if_else(name==name_cleansed,FALSE,TRUE))

enter image description here

r regex gsub
2个回答
0
投票

如果我们只需要第一个特殊字符,则可以使用str_extract

library(stringr)
str_extract(a$name,'[[:punct:]]')
#[1] NA  "'" "_" NA  "%" "_" "@"

如果需要所有特殊字符,可以使用str_extract_all

sapply(str_extract_all(a$name,'[[:punct:]]'), function(x) toString(unique(x)))
#[1] ""     "'"    "_"    ""     "%"    "_, !" "@, !"

0
投票

我们可以在此处将grepl用于基本R选项:

a <- data.frame(name=c("foo","bar'","ip_sum","four","%23","2_planet!","@abc!!"))
a$has_special_char <- grepl("[[:punct:]]", a$name)
a

       name has_special_char
1       foo            FALSE
2      bar'             TRUE
3    ip_sum             TRUE
4      four            FALSE
5       %23             TRUE
6 2_planet!             TRUE
7    @abc!!             TRUE
© www.soinside.com 2019 - 2024. All rights reserved.