Façons de lire seulement Sélectionner les colonnes d'un fichier dans R? (Un milieu entre `` read.table` et scan`?) [Double]

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

Question

    

Cette question a déjà une réponse ici:

    
            
  •              seulement lire les colonnes sélectionnées                                      3 réponses                          
  •     
    

J'ai quelques très gros fichiers de données Délimité et Je veux traiter uniquement certaines colonnes R sans prendre le temps et de la mémoire pour créer un data.frame pour le fichier entier.

Les options que je connais sont read.table qui est très inutile quand je veux seulement quelques colonnes ou scan qui semble trop faible pour ce que je veux.

Y at-il une meilleure option, que ce soit avec R pur ou en appelant peut-être vers un autre script shell pour faire l'extraction de colonne, puis à l'aide de balayage ou read.table sur sa sortie? (Ce qui nous amène à la question comment appeler un script shell et capturer sa sortie en R?).

Était-ce utile?

La solution

Parfois, je fais quelque chose comme ça quand j'ai les données dans un fichier délimité par des tabulations:

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

Cela permet cut faire la sélection des données, qu'il peut le faire sans utiliser de mémoire du tout.

Voir lecture d'un nombre restreint de colonnes pur version R, en utilisant "NULL" dans l'argument colClasses à read.table.

Autres conseils

Une possibilité est d'utiliser pipe() au lieu du nom de fichier et ont des filtres awk ou similaires extraire uniquement les colonnes que vous voulez.

Voir help(connection) pour plus sur pipe et les amis.

Modifier : read.table() peut aussi le faire pour vous si vous êtes très explicite sur colClasses - une valeur NULL pour une colonne donnée saute la colonne alltogether. Voir help(read.table). Donc, nous avons là une solution à base de R sans paquets supplémentaires ou des outils.

Je pense que l'approche de Dirk est simple et aussi rapide. Une alternative que je l'ai utilisé est de charger les données dans SQLite qui charge beaucoup plus rapide que read.table () puis retirez seulement ce que vous voulez. le sqldf paquet () rend tout cela très facile. Voici un lien à un précédent réponse de débordement pile qui donne des exemples de code pour sqldf ().

Ceci est probablement plus que vous avez besoin, mais si vous travaillez sur très gros ensembles de données, alors vous pourriez aussi jeter un oeil à le paquet HadoopStreaming qui fournit une carte-routine réduire en utilisant Hadoop .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top