Como faço para remover parte de uma corda? Por exemplo, em ATGAS_1121
Desejo remover tudo antes _
.
90
Use expressões regulares. Nesse caso, você pode usar gsub
:
gsub("^.*?_","_","ATGAS_1121")
[1] "_1121"
Esta expressão regular corresponde ao início da string (^), qualquer caractere (.) Repetido zero ou mais vezes (*) e sublinhado (_). O ? torna a correspondência "preguiçosa", de forma que apenas as correspondências estejam no primeiro sublinhado. Essa correspondência é substituída por apenas um sublinhado. Veja ?regex
para mais detalhes e referências
gsub("^.*_","_","ATGAS_1121_xxx")
,. Agora corrigido.Você pode usar um integrado para isso, strsplit :
> s = "TGAS_1121" > s1 = unlist(strsplit(s, split='_', fixed=TRUE))[2] > s1 [1] "1121"
strsplit retorna ambas as partes da string analisadas no parâmetro de divisão como uma lista . Provavelmente não é isso que você deseja, então envolva a chamada em unlist e indexe essa matriz de modo que apenas o segundo dos dois elementos do vetor seja retornado.
Finalmente, o parâmetro fixo deve ser definido como TRUE para indicar que o parâmetro de divisão não é uma expressão regular, mas um caractere de correspondência literal.
fonte
Se você é o tipo de pessoa do Tidyverse , esta é a solução de 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"
fonte
Aqui está a
strsplit
solução ses
for um vetor:> s <- c("TGAS_1121", "MGAS_1432") > s1 <- sapply(strsplit(s, split='_', fixed=TRUE), function(x) (x[2])) > s1 [1] "1121" "1432"
fonte
Talvez a solução mais intuitiva seja provavelmente usar a
stringr
função,str_remove
que é ainda mais fácil do questr_replace
, pois tem apenas 1 argumento em vez de 2.A única parte complicada em seu exemplo é que você deseja manter o sublinhado, mas é possível: você deve corresponder à expressão regular até que ela encontre o padrão de string especificado
(?=pattern)
.Consultar exemplo:
strings = c("TGAS_1121", "MGAS_1432", "ATGAS_1121") strings %>% stringr::str_remove(".+?(?=_)") [1] "_1121" "_1432" "_1121"
fonte
Aqui, a
strsplit
solução para um dataframe usando odplyr
pacotecol1 = 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
fonte