R 替换字符串中的特定字符

R 替换字符串中的特定字符,r,regex,replace,gsub,string-substitution,R,Regex,Replace,Gsub,String Substitution,我想从向量中的字符串中删除特定字符,类似于Excel中的查找和替换功能 以下是我开始的数据: group <- data.frame(c("12357e", "12575e", "197e18", "e18947") 使用正则表达式和函数gsub(): group正则表达式是您的朋友: R> ## also adds missing ')' and sets column name R> group<-data.frame(group=c("12357e", "1257

我想从向量中的字符串中删除特定字符,类似于Excel中的查找和替换功能

以下是我开始的数据:

group <- data.frame(c("12357e", "12575e", "197e18", "e18947")

使用正则表达式和函数
gsub()


group正则表达式是您的朋友:

R> ## also adds missing ')' and sets column name
R> group<-data.frame(group=c("12357e", "12575e", "197e18", "e18947"))  )
R> group
   group
1 12357e
2 12575e
3 197e18
4 e18947

总结了两种替换字符串的方法:

group<-data.frame(group=c("12357e", "12575e", "197e18", "e18947"))
2) 使用
stringr

group$group.no.e <- str_replace_all(group$group, "e", "")
使用软件包:

require(stringi)

组如果要替换其中的某些字符,则不需要从字符串向量创建数据帧。正则表达式是很好的选择,因为@Andrie和@Dirk Eddelbuettel已经提到了它

请注意,如果要替换特殊字符(如点),应使用完整的正则表达式语法,如下例所示:

ctr_names <- c("Czech.Republic","New.Zealand","Great.Britain")
gsub("[.]", " ", ctr_names)
>库(stringi)
>组模式替换组
[1] "12357"  "12575"  "12575"  " 19718" "18947" 

也…
需要(stringr);组$groupNoE好吧,我可以窃笑“那些不理解基函数的人注定要取代它们”。除了增加源文件中的下划线数量外,stringr在这里究竟有什么好处?“stringr是一组简单的包装器,它使R的字符串函数更一致、更简单、更易于使用”,来自软件包的作者。因此,如果您所说的是真的(许多下划线用于包装基本函数…),那么这个包就没有理由存在(免责声明:我主要使用基本正则表达式函数,但我知道它们对新用户来说可能很难…@dickoa:
stru-replace
wraps
sub
),因此它只会替换第一次出现的模式。如果您希望使用与
gsub
相同的行为,则需要使用
str\u replace\u all
fixed=TRUE
可以更快地执行此操作。@RichScriven您能否简要解释一下原因?
fixed=TRUE
阻止R使用正则表达式,这允许更灵活的模式匹配,但需要时间进行计算。如果只需要删除一个常量字符串“e”,那么它们就没有必要了。
sub(“e”),group)
会保持相同的结果吗?只需替换在每个元素中找到的第一个
e
,此时您必须阅读整页,包括注释,以了解stringr的语法,这是我首选的方法,因为它主要是在评论中讨论的。这个解决方案很快就提供了这两种选择,这就是我为什么提供它的原因。我的希望是帮助其他用户进行过滤,就像我刚接触R时所做的那样。在找到stringr之前,我与gsub进行了斗争,因为在一个投票率很高的回答中没有提到它。同样,我们的目标不是收集投票,而是帮助新的R用户。如果您在其他答案/评论中找到有用的信息,并希望转换为答案,你至少可以提供一些属性来说明你是从哪里获得信息的/将答案制作成一个粉碎的Wiki,而不是仅仅将其作为你自己的。谢谢-下次请记住。以前从未创建过社区wiki,因此不知道它是一个选项。选项2在应用于数据框中的一列数据时效果很好,而不指定该列中的所有值。很明显,选项1是重复的,但选项2工作得很好,值得对添加的功能投赞成票。您可以对它们进行转义,但必须对转义字符进行转义,因为它在引号中:
gsub(“\\”,”,ctr\u names)
group<-data.frame(group=c("12357e", "12575e", "197e18", "e18947"))
group$group.no.e <- gsub("e", "", group$group)
group$group.no.e <- str_replace_all(group$group, "e", "")
   group group.no.e
1 12357e      12357
2 12575e      12575
3 197e18      19718
4 e18947      18947
require(stringi)

group<-data.frame(c("12357e", "12575e", "197e18", "e18947"))
stri_replace_all(group[,1], "", fixed="e")
[1] "12357" "12575" "19718" "18947"
ctr_names <- c("Czech.Republic","New.Zealand","Great.Britain")
gsub("[.]", " ", ctr_names)
[1] "Czech Republic" "New Zealand"    "Great Britain" 
> library(stringi)                
> group <- c('12357e', '12575e', '12575e', ' 197e18',  'e18947')              
> pattern <- "e"  
> replacement <-  ""  
> group <- str_replace(group, pattern, replacement)      
> group 
[1] "12357"  "12575"  "12575"  " 19718" "18947"