如何在R中从字符串中删除+(加号)符号?

7

假设我使用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_"

5
你可以将 fixed = TRUE 设为真或者在加号前使用转义符。 - Jota
太棒了,谢谢,它起作用了! - Jonathan
在我看来,R 是一个弱的正则表达式平台。如果你的大部分工作都是这种类型的话,学习 bash 正则表达式工具和/或 Perl 将是值得的。 - Novice
2
gsub("[+]", "_", test) - alexwhitworth
3个回答

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

+ 是一个特殊字符,需要进行转义。与此类似的还有 . 等字符。如果你搜索正则表达式或者 regex,你会找到相应的特殊字符列表。例如,在这里,描述了 + 表示前面的表达式1次或多次重复。关于特殊字符、正则表达式和R语言的更多信息可以在这里这里找到。

从更一般的角度来看,使用以下代码可以更有效地书写:

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

这里我使用了一种结构,基本上可以理解为[要么这个或那个或别的什么],其中|表示或者


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

感谢Jota的贡献


1
这也比不使用 fixed = TRUE\\+ 更快。 - Rich Scriven

-2

我也曾经卡住了。以下代码对我有用:

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

然而,有一次它没有起作用。我尝试了 Ian 的解决方案。它有效了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接