Formas de leer sólo seleccionar las columnas de un archivo en R? (Un término medio entre `` read.table` y scan`?) [Duplicado]

StackOverflow https://stackoverflow.com/questions/2193742

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?).

¿Fue útil?

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 ().

Esto es probablemente más de lo necesario, pero si usted está operando en muy grande conjuntos de datos entonces es posible que también tenga una mirada en el paquete HadoopStreaming que proporciona un mapa-reducir rutina utilizando Hadoop .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top