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.

Extraer el número máximo de una cadena de texto

Quiero extraer el valor numérico más alto de cada cadena considerando que a veces esa cadena será un NA, que se copiará como NA.

He probado la siguiente solución:

“`{r}
df2$val = sapply(strsplit(df2$NomNivelComplej , '\D+'), function(x) max(as.numeric(x)))

<pre><code><br />Pero todo lo que obtengo es NA.

Datos:

</code></pre>

df2 = structure(list(IdCx = c(47111L, 47111L, 47111L, 47111L, 47108L,
47108L, 47107L, 47107L, 47106L, 47106L), NomNivelComplej = c("De 111 Hasta 130 U.V.R.",
NA, "De 111 Hasta 130 U.V.R.", "De 111 Hasta 130 U.V.R.", "De 91 Hasta 100 U.V.R.",
"De 131 Hasta 150 U.V.R.", "De 31 Hasta 40 U.V.R.", "De 71 Hasta 80 U.V.R.",
"De 111 Hasta 130 U.V.R.", "De 111 Hasta 130 U.V.R.")), row.names = c(NA,
10L), class = "data.frame")
“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para extraer el valor numérico más alto de cada cadena considerando que a veces esa cadena será un NA, que se copiará como NA, puede modificar la función sapply en el código que ha intentado. En lugar de usar directamente max en el resultado de as.numeric(x), primero debe verificar si hay algún valor numérico en x. Puede hacer esto usando la función is.numeric y luego devolviendo tanto el valor máximo como NA si no hay valores numéricos. Aquí está el código modificado:

    df2$val = sapply(strsplit(df2$NomNivelComplej , '\\D+'), function(x) {
      if (any(is.numeric(x))) {
        max(as.numeric(x))
      } else {
        NA
      }
    })
    

    Esto debería brindarle el valor numérico más alto de cada cadena, o NA si la cadena no contiene ningún valor numérico.

Comments are closed.