Quelqu'un peut-il me dire comment lire uniquement les 6 premiers mois (7 colonnes) pour chaque année des données ci-dessous, par exemple en utilisant read.table()
?
Year Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2009 -41 -27 -25 -31 -31 -39 -25 -15 -30 -27 -21 -25
2010 -41 -27 -25 -31 -31 -39 -25 -15 -30 -27 -21 -25
2011 -21 -27 -2 -6 -10 -32 -13 -12 -27 -30 -38 -29
NULL
comme classe de colonne dans sa réponse .Réponses:
Supposons que les données soient dans un fichier
data.txt
, vous pouvez utiliser l'colClasses
argument deread.table()
pour ignorer les colonnes. Ici, les données des 7 premières colonnes sont"integer"
et nous définissons les 6 colonnes restantes pour"NULL"
indiquer qu'elles doivent être ignoréesPassez
"integer"
à l'un des types acceptés comme détaillé dans en?read.table
fonction du type réel de données.data.txt
ressemble à ça:et a été créé en utilisant
où
dat
estSi le nombre de colonnes n'est pas connu à l'avance, la fonction utilitaire
count.fields
lira le fichier et comptera le nombre de champs dans chaque ligne.la source
nrows
. Ensuite, déterminez le nombre de colonnes utiliséesncol()
, ou quelle que soit la manière dont vous souhaitez calculer le nombre de colonnes à lire / ignorer. Ensuite, lisez le fichier complet en utilisant ces informations.count.fields()
qui automatise le processus que j'ai suggéré dans les commentaires.count.fields()
une connexion texte, alors, lisez un sous-ensemble des lignes à l'aide detxt <- readLines(....)
, puis créez une connexion aux lignes de lecturecon <- textConnection(txt)
, puis faitescount.fields(txt)
. Veillez à utiliserskip
incount.fields()
pour ignorer la ligne d'en-tête s'il y en a une; vous ne pouvez pas sauter de lignes dans le fichier avecreadLines()
.Pour lire un ensemble spécifique de colonnes à partir d'un ensemble de données vous, il existe plusieurs autres options:
1) Avec
fread
dudata.table
-package:Vous pouvez spécifier les colonnes souhaitées avec le
select
paramètre àfread
partir dudata.table
package. Vous pouvez spécifier les colonnes avec un vecteur de noms de colonnes ou de numéros de colonnes.Pour l'exemple d'ensemble de données:
Vous pouvez également utiliser le
drop
paramètre pour indiquer quelles colonnes ne doivent pas être lues:Tous aboutissent à:
MISE À JOUR: Lorsque vous ne voulez
fread
pas renvoyer une table data.table , utilisez ledata.table = FALSE
paramètre -paramètre, par exemple:fread("data.txt", select = c(1:7), data.table = FALSE)
2) Avec
read.csv.sql
dusqldf
-package:Une autre alternative est la
read.csv.sql
fonction dusqldf
package:3) Avec les
read_*
-fonctions du -packagereadr
:Dans la documentation, une explication des caractères utilisés avec
col_types
:la source
fread
ne prend cependant pas en charge les fichiers compressés. Les fichiers volumineux sont généralement compressés.fread
. Il convient de noter que lafread
lecture du fichier non compressé sera très probablement beaucoup plus rapide que celleread.table
du fichier compressé. Voir ici pour un exemple .read.table
ne vous sauvera pas. Dans ce cas, vous voudrez peut-être regarder leff
-package.fread
pour lire les fichiers compressés volumineux comme celui - ci:fread("gunzip -c data.txt.gz", drop = c(8:13))
.Vous pouvez également utiliser JDBC pour y parvenir. Créons un exemple de fichier csv.
Téléchargez et enregistrez le pilote CSV JDBC à partir de ce lien: http://sourceforge.net/projects/csvjdbc/files/latest/download
la source
Vous le faites comme ceci:
la source