string - separar - separador decimal en chile
as.numeric con comas separadores decimales? (5)
Además, si está leyendo los datos sin procesar, la read.table
y todas las funciones asociadas tienen un argumento dec
. p.ej:
read.table("file.txt", dec=",")
Cuando todo lo demás falla, gsub
y sub
son tus amigos.
Tengo un gran vector de cadenas de la forma:
Input = c("1,223", "12,232", "23,0")
Es decir, decimales separados por comas, en lugar de puntos. Quiero convertir este vector en un vector numérico. Desafortunadamente, as.numeric(Input)
simplemente genera NA
.
Mi primer instinto sería ir a strsplit
, pero me parece que esto probablemente será muy lento. ¿Alguien tiene alguna idea de una opción más rápida?
Existe una pregunta que sugiere read.csv2
, pero las cadenas en cuestión no se leen directamente de esa manera.
Como se indica en, es mucho más fácil hacerlo al importar un archivo. El paquete de reads recientemente lanzado tiene una característica muy útil, la locale
, bien explicada here , que permite al usuario importar números con una coma decimal utilizando el argumento locale = locale(decimal_mark = ",")
como argumento.
Sobre la base de la solución @adibender:
as.numeric(gsub("^([0-9]+),([0-9]+)$","//1.//2", input))
Supongo que es un partido más seguro ...
as.numeric(sub(",", ".", Input, fixed = TRUE))
Deberia trabajar.
scan(text=Input, dec=",")
## [1] 1.223 12.232 23.000
Pero depende de cuánto tiempo es su vector. rep(Input, 1e6)
para hacer un vector largo y mi máquina simplemente se bloquea. 1e4
está bien, sin embargo. La solución de @adibender es mucho más rápida. Si corremos en 1e4, mucho más rápido:
Unit: milliseconds
expr min lq median uq max neval
adibender() 6.777888 6.998243 7.119136 7.198374 8.149826 100
sebastianc() 504.987879 507.464611 508.757161 510.732661 517.422254 100