313

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

这是我开始的数据:

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

我从第一列开始;我想通过删除e's来生成第二列:

group       group.no.e
12357e      12357
12575e      12575
197e18      19718
e18947      18947
4

6 回答 6

463

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

group <- c("12357e", "12575e", "197e18", "e18947")
group
[1] "12357e" "12575e" "197e18" "e18947"

gsub("e", "", group)
[1] "12357" "12575" "19718" "18947"

这里的作用是用空字符串gsub替换每次出现的。"e"""


请参阅?regexpgsub获取更多帮助。

于 2012-08-13T14:29:47.347 回答
53

正则表达式是你的朋友:

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

现在使用gsub()最简单的替换模式:空字符串:

R> group$groupNoE <- gsub("e", "", group$group)
R> group
   group groupNoE
1 12357e    12357
2 12575e    12575
3 197e18    19718
4 e18947    18947
R> 
于 2012-08-13T14:30:27.980 回答
34

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

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

1) 使用gsub

group$group.no.e <- gsub("e", "", group$group)

2)使用stringr

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
于 2015-08-04T14:11:31.363 回答
16

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

注意,如果你想替换特殊字符,比如点,你应该使用完整的正则表达式语法,如下例所示:

ctr_names <- c("Czech.Republic","New.Zealand","Great.Britain")
gsub("[.]", " ", ctr_names)

这将产生

[1] "Czech Republic" "New Zealand"    "Great Britain" 
于 2017-02-09T13:13:26.977 回答
5

使用stringi包:

require(stringi)

group<-data.frame(c("12357e", "12575e", "197e18", "e18947"))
stri_replace_all(group[,1], "", fixed="e")
[1] "12357" "12575" "19718" "18947"
于 2015-11-22T07:48:27.650 回答
0
> 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" 
于 2019-04-05T22:33:28.723 回答