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 argumentostringsAsFactors=FALSE
- ¿Estás seguro de que es
sep="/t
y nosep="/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.