str_split_fixed str_replace str_detect sheet cheat string r

string - str_replace - Conversión de cadena a numérica



str_split_fixed (2)

Esta pregunta ya tiene una respuesta aquí:

Importé un archivo de prueba e intenté hacer un histograma

pichman <- read.csv(file="picman.txt", header=TRUE, sep="/t") hist <- as.numeric(pichman$WS)

Sin embargo, obtengo números diferentes de los valores en mi conjunto de datos. Originalmente pensé que esto porque tenía texto, así que borré el texto:

table(pichman$WS) ws <- pichman$WS[pichman$WS!="Down" & pichman$WS!="NoData"]

Sin embargo, todavía estoy recibiendo números muy altos ¿alguien tiene una idea?


Como dijo csgillespie. stringsAsFactors está predeterminado en TRUE, que convierte cualquier texto en un factor. Entonces, incluso después de eliminar el texto, todavía tiene un factor en su marco de datos.

Ahora con respecto a la conversión, hay una forma más óptima de hacerlo. Así que lo puse aquí como referencia:

> x <- factor(sample(4:8,10,replace=T)) > x [1] 6 4 8 6 7 6 8 5 8 4 Levels: 4 5 6 7 8 > as.numeric(levels(x))[x] [1] 6 4 8 6 7 6 8 5 8 4

Para mostrar que funciona

Los tiempos:

> x <- factor(sample(4:8,500000,replace=T)) > system.time(as.numeric(as.character(x))) user system elapsed 0.11 0.00 0.11 > system.time(as.numeric(levels(x))[x]) user system elapsed 0 0 0

Es una gran mejora, pero no siempre es un cuello de botella. Sin embargo, es importante si tienes un gran marco de datos y muchas columnas para convertir.


Sospecho que tienes un problema con los factores. Por ejemplo,

> x = factor(4:8) > x [1] 4 5 6 7 8 Levels: 4 5 6 7 8 > as.numeric(x) [1] 1 2 3 4 5 > as.numeric(as.character(x)) [1] 4 5 6 7 8

Algunos comentarios:

  • Menciona que su vector contiene los caracteres "Abajo" y "NoData". ¿Qué es lo que se espera / quiere que as.numeric con estos valores?
  • En read.csv , intente utilizar el argumento stringsAsFactors=FALSE
  • ¿Estás seguro de que es sep="/t y no sep="/t"
  • Use el comando head(pitchman) para verificar las primeras filas de sus datos
  • Además, es muy difícil adivinar cuál es su problema cuando no proporciona datos. Un ejemplo de trabajo mínimo siempre es preferible. Por ejemplo, no puedo ejecutar el comando pichman <- read.csv(file="picman.txt", header=TRUE, sep="/t") ya que no tengo acceso al conjunto de datos.