R删除部分string

我如何删除部分刺痛? 像ATGAS_1121。 对于这个例子,我想删除之前的一切_

谁能帮我? 谢谢!

使用正则expression式。 在这种情况下,你可以使用gsub

 gsub("^.*?_","_","ATGAS_1121") [1] "_1121" 

此正则expression式匹配string(^)的开头,任意字符(。)重复零次或多次(*)和下划线(_)。 这个? 使匹配“懒惰”,使其只匹配远不如第一个下划线。 该匹配被replace为一个下划线。 有关更多详细信息和参考资料,请参见?regex

你可以使用一个内置的, strsplit

 > s = "TGAS_1121" > s1 = unlist(strsplit(s, split='_', fixed=TRUE))[2] > s1 [1] "1121" 

strsplit作为一个列表返回在split参数上分析的两个string。 这可能不是你想要的,所以在unlist中包装调用,然后索引该数组,以便只有vector中两个元素的第二个被返回。

最后, 固定参数应设置为TRUE,以表示split参数不是正则expression式,而是文字匹配字符。

如果s是一个向量,这里是strsplit解决scheme:

 > s <- c("TGAS_1121", "MGAS_1432") > s1 <- sapply(strsplit(s, split='_', fixed=TRUE), function(x) (x[2])) > s1 [1] "1121" "1432" 

如果你是一个Tidyverse类的人,这里是stringr解决scheme:

 R> library(stringr) R> strings = c("TGAS_1121", "MGAS_1432", "ATGAS_1121") R> strings %>% str_replace(".*_", "_") [1] "_1121" "_1432" "_1121" # Or: R> strings %>% str_replace("^[AZ]*", "") [1] "_1121" "_1432" "_1121" 

这里使用dplyr包的数据strsplit解决scheme

 col1 = c("TGAS_1121", "MGAS_1432", "ATGAS_1121") col2 = c("T", "M", "A") df = data.frame(col1, col2) df col1 col2 1 TGAS_1121 T 2 MGAS_1432 M 3 ATGAS_1121 A df<-mutate(df,col1=as.character(col1)) df2<-mutate(df,col1=sapply(strsplit(df$col1, split='_', fixed=TRUE),function(x) (x[2]))) df2 col1 col2 1 1121 T 2 1432 M 3 1121 A