Удалить часть строки - PullRequest
       1

Удалить часть строки

77 голосов
/ 14 марта 2012

Как мне удалить часть строки? Например, в ATGAS_1121 я хочу удалить все до _.

Ответы [ 5 ]

111 голосов
/ 14 марта 2012

Используйте регулярные выражения. В этом случае вы можете использовать gsub:

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

Это регулярное выражение соответствует началу строки (^), любому символу (.), Повторенному ноль или более раз (*), и подчеркиванию (_). ? делает совпадение «ленивым», так что оно совпадает с первым подчеркиванием. Это совпадение заменяется только подчеркиванием. См. ?regex для более подробной информации и ссылок

31 голосов
/ 14 марта 2012

Вы можете использовать встроенный для этого strsplit :

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

strsplit возвращает оба фрагмента строки, проанализированной в параметре split , в виде списка . Вероятно, это не то, что вам нужно, поэтому оберните вызов в unlist , затем index этого массива, чтобы возвращался только второй из двух элементов в векторе.

Наконец, параметр fixed должен быть установлен в TRUE, чтобы указать, что параметр split является не регулярным выражением, а литеральным совпадающим символом.

17 голосов
/ 05 марта 2015

Вот решение strsplit, если s - вектор:

> s <- c("TGAS_1121", "MGAS_1432")
> s1 <- sapply(strsplit(s, split='_', fixed=TRUE), function(x) (x[2]))
> s1
[1] "1121" "1432"
16 голосов
/ 14 февраля 2017

Если вы человек Tidyverse, вот решение stringr :

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("^[A-Z]*", "")
[1] "_1121" "_1432" "_1121"
3 голосов
/ 03 июня 2015

Здесь решение strsplit для кадра данных с использованием пакета dplyr

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...