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.

Detecte el tipo de cadena y cree una nueva variable de acuerdo a ello.

Tengo un conjunto de datos de contraseñas y me gustaría crear una nueva columna si la contraseña coincide con una de las siguientes cadenas (estoy trabajando con R)

Patrón para contraseñas con solo letras: “^[a-zA-Z]+$”

Patrón para contraseñas con solo números: “^[0-9]*$”

Patrón para contraseñas con números y letras: ‘([0-9].[a-zA-Z])|([a-zA-Z].[0-9])’

Básicamente, necesitaría una nueva columna llamada: TIPO con 3 niveles (números, letras o ambos)

Lo que necesito es esto:

id password year length Type
1 1 12345 2001 5 números solo
2 2 pass4 2002 5 ambos
3 3 angel 2003 5 letras solo
4 4 pizza 2004 5 letras solo

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para crear la nueva columna “Type” basada en el patrón de la contraseña, podemos utilizar la función ifelse combinada con expresiones regulares (regex).

    # Importar el conjunto de datos
    df <- data.frame(id = 1:4,
                     password = c("12345", "pass4", "angel", "pizza"),
                     year = 2001:2004,
                     length = rep(5, 4),
                     stringsAsFactors = FALSE)
    
    # Definir las expresiones regulares para cada patrón
    solo_letras <- "^[a-zA-Z]+$"
    solo_numeros <- "^[0-9]*$"
    ambos_numeros_letras <- '([0-9].*[a-zA-Z])|([a-zA-Z].*[0-9])'
    
    # Utilizar la función ifelse y regex para crear la nueva columna "Type"
    df$Type <- ifelse(grepl(solo_numeros, df$password), "solo números",
                      ifelse(grepl(solo_letras, df$password), "solo letras",
                             ifelse(grepl(ambos_numeros_letras, df$password), "ambos", NA)))
    
    # Ver el conjunto de datos actualizado
    df
    

    Esto debería dar el resultado deseado:

    #   id password year length           Type
    # 1  1    12345 2001      5 solo números
    # 2  2    pass4 2002      5         ambos
    # 3  3    angel 2003      5    solo letras
    # 4  4    pizza 2004      5    solo letras
    

Comments are closed.