从每个字符串的末尾删除一个特定字符

时间:2016-08-05 06:30:55

标签: r

如何从数据末尾删除“/”。我们假设这是我的数据

#input 
ID    page
 1    www.example.com/, ww.example.com/flight, www.example.com/flight/
 2    www.example.com/, ww.example.com/flight

我希望从那些拥有最后一个角色的人中删除“/”,我的输出将是那样的

 #output 
 ID    page
 1    www.example.com, ww.example.com/flight, www.example.com/flight
 2    www.example.com, ww.example.com/flight

2 个答案:

答案 0 :(得分:7)

一个选项:

gsub("/(?=,|$)", "", as.character(df$page), perl = TRUE)
#[1] "www.example.com, ww.example.com/flight, www.example.com/flight"
#[2] "www.example.com, ww.example.com/flight"

这会检查/后面是逗号,还是字符串$的结尾,如果找到,/将替换为"" {1}},即删除它。由于这是一个后视,我们使用perl = TRUE

其他选项(效率较低):

sapply(strsplit(as.character(df$page), ", ", fixed = TRUE), function(x) toString(sub("/$", "", x)))
#[1] "www.example.com, ww.example.com/flight, www.example.com/flight"
#[2] "www.example.com, ww.example.com/flight" 

答案 1 :(得分:2)

我们可以在没有外观的情况下使用gsub。在这里,我们删除/后跟字符串末尾($)或,并且将其替换为,。在随后的sub中,我们会删除最后的,

df1$page <- sub(",$", "", gsub("/($|,)", ",", df1$page))

df1$page
#[1] "www.example.com, ww.example.com/flight, www.example.com/flight" 
#[2] "www.example.com, ww.example.com/flight"         

或另一种选择是

 gsub("/(?!\\b)", "", df1$page, perl = TRUE)
 #[1] "www.example.com, ww.example.com/flight, www.example.com/flight" 
 #[2] "www.example.com, ww.example.com/flight"