2015-11-27 34 views
7

我有一个字符串变量,包含字母表[a-z],空格[]和撇号['],例如。 x <- "a'b c" 我想用空白[]替换撇号['],并用下划线[_]替换空格[]。在R中的一个gsub()或chartr()语句中替换多个字符串?

x <- gsub("'", "", x) 
x <- gsub(" ", "_", x) 

它的工作是绝对的,但是当我有很多条件时,代码变得很难看。因此,我想用chartr(),但chartr()不能处理空白,例如。

x <- chartr("' ", "_", x) 
#Error in chartr("' ", "_", "a'b c") : 'old' is longer than 'new' 

有什么办法可以解决这个问题吗?谢谢!

+1

你已经用两个gsub解决了它。如果它看起来太丑,你可以创建自己的包装函数,我认为它更“漂亮”。但是你不能使用'chartr',因为“空白”不是一个角色,而是缺少一个角色。 – MrFlick

回答

5

您可以使用gsubfn

library(gsubfn) 
gsubfn(".", list("'" = "", " " = "_"), x) 
# [1] "ab_c" 
9

我从magrittr%<>%%>% opperators提供语法的粉丝。

library(magrittr) 

x <- "a'b c" 

x %<>% 
    gsub("'", "", .) %>% 
    gsub(" ", "_", .) 
x 
##[1] "ab_c" 

gusbfn是美好的,但我喜欢的链接%>%允许。

+1

第三个参数“”的含义是什么。“ in gsub() – Ali

+2

默认情况下,'%>%'左侧的对象*右移到右侧的第一个参数。如果LHS需要(如本例中的第三个参数)那么'.'是占位符。有关更多详细信息,请参阅vignette(“magrittr”)。 – Peter

0
gsub("\\s", "", chartr("' ", " _", x)) # Use whitespace and then remove it 
0

我会选择一个magrittr和/或dplyr溶液,以及。但是,我不喜欢创建该对象的新副本,特别是如果它处于某个函数中并且可以便宜地返回。

return(
    catInTheHat %>% gsub('Thing1', 'Thing2', .) %>% gsub('Red Fish', 'Blue 
    Fish', .) 
) 

...等等。

相关问题