Formas de leer sólo seleccionar las columnas de un archivo en R? (Un término medio entre `` read.table` y scan`?) [Duplicado]
-
25-09-2019 - |
Pregunta
Esta pregunta ya tiene una respuesta aquí:
- columnas de sólo lectura seleccionados 3 respuestas
Tengo algunos archivos de datos delimitado muy grandes y Quiero procesar sólo ciertas columnas en I sin tomarse el tiempo y la memoria para crear un data.frame
para todo el archivo.
Las únicas opciones que conozco son read.table
que es un gran desperdicio cuando sólo quiero un par de columnas o scan
que parece demasiado bajo nivel para lo que quiero.
¿Hay una mejor opción, ya sea con R puro o tal vez llamando a algún otro script de shell para hacer la extracción de la columna y luego utilizando exploración o read.table en él de salida? (Que conduce a la pregunta de cómo llamar a un script de shell y la captura de su salida en I?).
Solución
A veces hacer algo como esto cuando tengo los datos en un archivo delimitado por tabuladores:
df <- read.table(pipe("cut -f1,5,28 myFile.txt"))
Esto permite cut
hacer la selección de datos, lo que se puede hacer sin necesidad de utilizar mucha memoria en absoluto.
sólo lectura número limitado de columnas para la versión R puro, usando "NULL"
en el argumento colClasses
a read.table
.
Otros consejos
Una posibilidad es utilizar pipe()
en lugar del nombre de archivo y tienen awk
o similares filtros extraer sólo las columnas que desee.
Ver help(connection)
para más información sobre pipe
y amigos.
Editar : read.table()
también puede hacer esto para usted si usted es muy explícito acerca de colClasses - un valor de NULL para una columna dada se salta el alltogether columna. Ver help(read.table)
. Así que no tenemos una solución en la base de I sin paquetes o herramientas adicionales.
Creo que el enfoque de Dirk es sencillo, así de rápido. Una alternativa que he utilizado es cargar los datos en SQLite que carga mucho más rápido que read.table () y luego extraiga sólo lo que quieres. sqldf el paquete () hace que esto sea bastante fácil. Aquí hay un enlace a una anterior respuesta de desbordamiento de pila que da ejemplos de código para sqldf ().