2016-03-04 103 views
4

說我使用gsub,並希望從字符串中刪除以下(=,+, - )符號並用下劃線替換。如何從R中的字符串中刪除+(加號)?

有人可以描述當我嘗試使用帶有加號(+)的gsub時發生了什麼。

test<- "sandwich=bread-mustard+ketchup" 
# [1] "sandwich=bread-mustard+ketchup" 

test<-gsub("-","_",test) 
# [1] "sandwich=bread_mustard+ketchup" 

test<-gsub("=","_",test) 
# [1] "sandwich_bread_mustard+ketchup" 

test<-gsub("+","_",test) 
#[1] "_s_a_n_d_w_i_c_h___b_r_e_a_d___m_u_s_t_a_r_d_+_k_e_t_c_h_u_p_" 
+2

您可以設置'固定= TRUE'或難逃 「+」。 – Jota

+0

太棒了,謝謝它的工作! – Jonathan

+0

在我看來,R是一個弱的正則表達式平臺。如果你的大部分工作都屬於這種類型,那麼學習bash正則表達式工具和/或Perl是值得的。 – Novice

回答

7

嘗試

test<- "sandwich=bread-mustard+ketchup" 
test<-gsub("\\+","_",test) 
test 
[1] "sandwich=bread-mustard_ketchup" 

+是一個特殊字符。你需要逃避它。與例如.相同。如果你的谷歌regex或正則表達式,你會發現相應的特殊字符列表。例如,here+被描述爲指示1 or more of previous expression。有關特殊字符的更多信息,可以找到正則表達式和R或here

在更一般的筆記,你上面的代碼可以更有效地使用被寫入:

test<- "sandwich=bread-mustard+ketchup" 
test<-gsub("[-|=|\\+]","_",test) 
test 
[1] "sandwich_bread_mustard_ketchup" 

在這裏,我已經使用了基本上可以理解爲[either this or that or something else],其中|對應or的構造。

2
test<-gsub("+","_",test,fixed = TRUE) 

信貸霍塔

+0

這比使用'\\ +'沒有'fixed = TRUE'快。 –

相關問題