我想從矢量中刪除字符串中的特定字符,類似於Excel中的查找和替換功能。在R中,替換字符串中的文本
這裏是我開始與數據:
group <- data.frame(c("12357e", "12575e", "197e18", "e18947")
我開始只是第一列;我想通過刪除e
的產生第二欄:
group group.no.e
12357e 12357
12575e 12575
197e18 19718
e18947 18947
我想從矢量中刪除字符串中的特定字符,類似於Excel中的查找和替換功能。在R中,替換字符串中的文本
這裏是我開始與數據:
group <- data.frame(c("12357e", "12575e", "197e18", "e18947")
我開始只是第一列;我想通過刪除e
的產生第二欄:
group group.no.e
12357e 12357
12575e 12575
197e18 19718
e18947 18947
使用正則表達式和功能gsub()
:
group <- c("12357e", "12575e", "197e18", "e18947")
group
[1] "12357e" "12575e" "197e18" "e18947"
gsub("e", "", group)
[1] "12357" "12575" "19718" "18947"
什麼gsub
在這裏所做的是用一個取代的"e"
每次出現空字符串""
。
見?regexp
或gsub
更多的幫助。
正則表達式是您的朋友:
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>
另外...'require(stringr); group $ groupNoE < - str_replace(group $ group,「e」,「」)' – dickoa 2012-08-13 14:37:40
嗯,我可以嘲笑說:「那些不瞭解基本函數的人註定要替換它們。究竟stringr在這裏獲得了什麼,除了增加源文件中下劃線的數量呢? – 2012-08-13 14:39:15
「** stringr是一組簡單的包裝,它使得R的字符串函數更加一致,更簡單,更易於使用**」。所以,如果你說的是真的(許多下劃線來包裝基本功能...)沒有理由這個軟件包存在(免責聲明:我主要使用基本的正則表達式函數,但我知道它們可能很難爲新用戶... ) – dickoa 2012-08-13 14:46:36
總結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
'gsub()'已經在其他兩個答案中提到過 – 2015-08-04 14:13:38
當時你不得不閱讀整個頁面,包括註釋以學習stringr的語法,這是我的首選方法,因爲它大部分是在評論中討論的。這個解決方案很快呈現出兩種選擇,這就是我提供它的原因。我的希望是幫助其他用戶過濾很多,就像我剛剛接觸R時所做的一樣。在找到stringr之前,我苦於使用gsub *,因爲*它在高度優先的答案中沒有提及。再次,目標不是收集upvotes,而是嘗試幫助新的R用戶。 – Megatron 2017-01-09 12:46:48
如果您發現其他答案/評論中的信息對您有用並且想要轉換爲答案,您至少可以提供一些信息來顯示您從哪裏獲取信息/將答案作爲Comminuty Wiki,而不僅僅是將其作爲參考作爲你自己的。 – 2017-01-09 13:14:11
使用stringi包:
require(stringi)
group<-data.frame(c("12357e", "12575e", "197e18", "e18947"))
stri_replace_all(group[,1], "", fixed="e")
[1] "12357" "12575" "19718" "18947"
你並不需要從矢量創建數據幀字符串,如果你想替換它中的一些字符。正則表達式是不錯的選擇,因爲它已被@Andrie和@Dirk Eddelbuettel提及。
注意的是,如果你要替換的特殊字符,如點,你應該使用完整的正則表達式語法,如下面的例子中:
ctr_names <- c("Czech.Republic","New.Zealand","Great.Britain")
gsub("[.]", " ", ctr_names)
這將產生
[1] "Czech Republic" "New Zealand" "Great Britain"
'固定= TRUE'會使這個更快。 – 2016-03-17 03:18:56
@RichScriven你能不能簡述一下爲什麼? – glaed 2016-09-23 10:56:09
'fixed = TRUE'阻止R使用正則表達式,這允許更靈活的模式匹配,但需要時間進行計算。如果只需要刪除一個常量字符串「e」,則不需要。 – mm689 2016-10-31 19:16:11