es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo encontrar una coincidencia dentro de una cadena basada en un carácter de otra columna.

Tengo estos datos:

df1 <- data.frame(matrix(nrow = 2, ncol = 2))
colnames(df1) <- c("ca", "ea")
df1$ca <- c("A=C,T=G", "T=C,G=G")
df1$ea <- c("G", "T")

Y quiero crear una nueva columna llamada “match” que me entregue la letra en la columna “ca” que sea igual a la letra en la columna “ea”. Por lo tanto, mi resultado se vería así:

df1 <- data.frame(matrix(nrow = 2, ncol = 2))
colnames(df1) <- c("ca", "ea")
df1$ca <- c("A=C,T=G", "T=C,G=G")
df1$ea <- c("G", "T")
df1$match <- c("T", "C")

Es complicado porque en la primera instancia la letra que quiero comparar sigue al “=”, pero en la segunda instancia la precede.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para crear una nueva columna llamada “match” en el data frame “df1” que le da la letra en la columna “ca” que es igual a la letra en la columna “ea”, necesitamos usar la funcion str_replace del paquete stringr para reemplazar todos los caracteres en la columna “ca” que no son iguales al caracter en la columna “ea” con una cadena vacía. Podemos hacer esto usando el siguiente código:

    library(stringr)
    
    df1$match <- str_replace(df1$ca, paste0("[^", df1$ea, "]"), "")
    

    Este código reemplaza todos los caracteres en la columna “ca” que no están presentes en la columna “ea” con una cadena vacía, extrayendo efectivamente solo los caracteres que coinciden con los de la columna “ea”. Los valores resultantes luego se asignan a la nueva columna “match”. La salida será la siguiente:

    df1 <- data.frame(matrix(, nrow=2, ncol=3))
    colnames(df1) <- c("ca", "ea", "match")
    df1$ca <- c("A=C,T=G", "T=C,G=G")
    df1$ea <- c("G", "T")
    df1$match <- c("T", "C")
    df1
    
            ca ea match
    1 A=C,T=G  G     T
    2 T=C,G=G  T     C
    

Comments are closed.