Maneiras de ler apenas colunas selecionadas de um arquivo em r? (Um meio feliz entre `leia.table` e` scan`?) [Duplicado

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

Pergunta

Esta pergunta já tem uma resposta aqui:

Eu tenho alguns arquivos de dados delimitados muito grandes e Eu quero processar apenas certas colunas em r sem dedicar tempo e memória para criar um data.frame Para todo o arquivo.

As únicas opções que eu conheço são read.table o que é muito desperdício quando eu só quero algumas colunas ou scan O que parece muito baixo para o que eu quero.

Existe uma opção melhor, com r puro ou talvez chamando algum outro script de shell para fazer a extração da coluna e depois usar o scan ou a leitura.table na saída? (O que leva à pergunta como chamar um script de shell e capturar sua saída em r?).

Foi útil?

Solução

Às vezes, faço algo assim quando tenho os dados em um arquivo delimitado por Tab:

df <- read.table(pipe("cut -f1,5,28 myFile.txt"))

Isso deixa cut Faça a seleção de dados, o que pode fazer sem usar muita memória.

Ver Leia apenas o número limitado de colunas para versão r pura, usando "NULL" no colClasses argumento para read.table.

Outras dicas

Uma possibilidade é usar pipe() em vez do nome do arquivo e ter awk ou filtros semelhantes extraem apenas as colunas que você deseja.

Ver help(connection) Para mais informações pipe e amigos.

Editar: read.table() Também pode fazer isso por você se você for muito explícito sobre o Colclasses - um valor de nulo para uma determinada coluna pula a coluna Altogether. Ver help(read.table). Portanto, temos uma solução na base R sem pacotes ou ferramentas adicionais.

Eu acho que a abordagem de Dirk é direta e rápida. Uma alternativa que eu usei é carregar os dados no sqlite que carregam muito mais rápido que a leitura.table () e depois retirar apenas o que você deseja. O pacote sqldf () facilita tudo isso. Aqui está um link a uma resposta anterior de pilha de pilha que fornece exemplos de código para sqldf ().

Provavelmente isso é mais do que você precisa, mas se você estiver operando muito grande Conjuntos de dados então você também pode dar uma olhada o pacote Hadoopstreaming que fornece uma rotina de redes de mapa usando Hadoop.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top