¿Cómo elimino parte de una picadura? como ATGAS_1121. Para este ejemplo, quiero eliminar todo antes de _R quitar parte de la cadena
¿Alguien me puede ayudar? ¡Gracias!
¿Cómo elimino parte de una picadura? como ATGAS_1121. Para este ejemplo, quiero eliminar todo antes de _R quitar parte de la cadena
¿Alguien me puede ayudar? ¡Gracias!
Use expresiones regulares. En este caso, puede utilizar gsub
:
gsub("^.*?_","_","ATGAS_1121")
[1] "_1121"
Esta expresión regular coincide con el comienzo de la cadena (^), cualquier carácter repetido cero o más veces (*), y el guión bajo (_) (.). Los ? hace que el partido sea "flojo" para que solo coincida con el primer guión bajo. Ese partido se reemplaza con solo un guion bajo. Ver ?regex
para más detalles y referencias
Se puede utilizar un incorporado para esto, strsplit:
> s = "TGAS_1121"
> s1 = unlist(strsplit(s, split='_', fixed=TRUE))[2]
> s1
[1] "1121"
strsplit vuelve ambos piezas de la cadena analizada en el dividida parámetro como lista. Probablemente eso no es lo que quiere, así que ajuste la llamada en unlist, luego índice esa matriz para que solo se devuelva el segundo de los dos elementos en el vector.
Finalmente, el parámetro fijo debe establecerse en TRUE para indicar que el parámetro de división no es una expresión regular, sino un carácter de coincidencia literal.
Aquí está la solución de strsplit
si s
es un vector:
> s <- c("TGAS_1121", "MGAS_1432")
> s1 <- sapply(strsplit(s, split='_', fixed=TRUE), function(x) (x[2]))
> s1
[1] "1121" "1432"
Muy útil, gracias! FYI para obtener la primera parte de la cuerda (es decir, antes del '_'), reemplace [2] en el extremo con un [1]. – stevenjoe
Aquí la solución strsplit
para una trama de datos utilizando dplyr
paquete
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
Si usted es una clase Tidyverse de la persona, aquí está el stringr solución:
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"
La expresión regular anterior coincidiría con el último guión bajo en el caso de, por ejemplo, 'gsub (" ^. * _ "," _ "," ATGAS_1121_xxx ")'. Ahora arreglado. –
@Joshua Me parece realmente útil que haya explicado el papel de las expresiones regulares. – Vasile
Esto también funciona con un vector de cadenas como último argumento. R es increíble así. – naught101