5 options pratiques dans le fread de R data.table

Comme toutes les fonctions du package data.table R, fread est rapide. Très vite. Mais il y a plus à craindre que la vitesse. Il possède plusieurs fonctionnalités et options utiles lors de l'importation de données externes dans R. Voici cinq des plus utiles.

Remarque: si vous souhaitez suivre, téléchargez le fichier CSV du New York Times des cas quotidiens de Covid-19 par comté américain à l'adresse //github.com/nytimes/covid-19-data/raw/master/us-counties. csv.

Utilisez l'option nrows de fread

Votre fichier est-il volumineux? Souhaitez-vous examiner sa structure avant d'importer le tout - sans avoir à l'ouvrir dans un éditeur de texte ou Excel? Utilisez l' nrowsoption de fread pour importer uniquement une partie d'un fichier à des fins d'exploration .

Le code ci-dessous importe uniquement les 10 premières lignes du CSV.

mydt10 <- fread ("us-counties.csv", nrows = 10)

Si vous souhaitez simplement voir les noms de colonnes sans aucune donnée, vous pouvez utiliser nrows = 0

Utiliser l'option de sélection de fread

Une fois que vous connaissez la structure des fichiers, vous pouvez choisir les colonnes à importer . L' selectoption de fread vous permet de choisir les colonnes que vous souhaitez conserver. selectprend un vecteur de noms de colonnes ou de numéros de position de colonne . S'il s'agit de noms, ils doivent être entre guillemets, comme la plupart des vecteurs de chaînes de caractères:

mydt <- fread ("us-counties.csv",

select = c ("date", "comté", "état", "cas"))

Comme toujours, les nombres n'ont pas besoin de guillemets:

mydt <- fread ("us-counties.csv", select = c (1,2,3,5))

Vous pouvez utiliser un objet R avec un vecteur de noms de colonnes à l'intérieur de fread, comme vous pouvez le voir dans ce prochain groupe de code. Je crée un vecteur my_cols avec la date, le comté, l'état et les cas; alors j'utilise ce vecteur à l'intérieur de fread.

mes_cols <- c ("date", "comté", "état", "cas")

mydt <- fread ("us-counties.csv", select = my_cols)

Le contraire de selectest drop. Vous pouvez choisir d'importer toutes les colonnes à l' exception de celles que vous spécifiez avec drop, telles que:

mydt <- fread ("us-counties.csv", drop = c ("fips", "décès"))

Comme avec select, dropprend un vecteur de noms de colonnes ou de positions numériques. 

Utiliser fread avec grep

Si vous êtes familier avec Unix, vous pouvez  exécuter des outils de ligne de commande directement de l'intérieur . Par exemple, si je voulais uniquement des données californiennes, je pourrais utiliser grep pour importer uniquement les lignes contenant le texte "Californie". Notez que cela recherche chaque ligne entière comme une chaîne de texte, pas une colonne spécifique, donc vos données doivent être dans un format où cela a du sens.

ca <- fread ("grep California us-counties.csv")

Malheureusement, grep ne comprend pas les noms de colonne du fichier d'origine, vous vous retrouvez donc avec des noms par défaut.

head (ca) V1 V2 V3 V4 V5 V6 1: 2020-01-25 Orange California 6059 1 0 2: 2020-01-26 Los Angeles California 6037 1 0 3: 2020-01-26 Orange California 6059 1 0 4: 2020 -01-27 Los Angeles Californie 6037 1 0 5: 2020-01-27 Orange Californie 6059 1 0 6: 2020-01-28 Los Angeles Californie 6037 1 0

Cependant, fread nous permet de spécifier les noms de colonnes avec l' col.namesoption. Je peux définir les noms en fonction des noms de mydt10 que j'ai créés ci-dessus.

ca tête (ca) date comté état fips cas décès 1: 2020-01-25 Orange Californie 6059 1 0 2: 2020-01-26 Los Angeles Californie 6037 1 0 3: 2020-01-26 Orange Californie 6059 1 0 4: 2020-01-27 Los Angeles Californie 6037 1 0 5: 2020-01-27 Orange Californie 6059 1 0 6: 2020-01-28 Los Angeles Californie 6037 1 0

Nous pouvons également utiliser des expressions régulières, avec l' -Eoption grep , nous permettant de faire des recherches plus complexes, comme la recherche de quatre états à la fois. 

states4 <- fread (cmd = "grep -E 'Texas | Arizona | Florida | South Carolina' us-counties.csv",

col.names = noms (mydt10))

Encore une fois, un rappel: il s'agit de rechercher chacun de ces noms d'état n'importe où dans la ligne , pas seulement dans la colonne d'état. Si vous exécutez le code ci-dessus et vérifiez avec quels états sont inclus les résultats unique(states4$state), vous verrez l'Oklahoma et le Missouri dans la colonne des états avec le Texas, l'Arizona, la Floride et la Caroline du Sud. C'est parce que l'Oklahoma et le Missouri ont des comtés nommés Texas.

Ainsi, grep pendant l'importation de fichiers est un moyen de filtrer un grand nombre de données que vous ne voulez pas d'un très grand ensemble de données; mais cela ne garantit pas que vous n'obtiendrez que ce que vous voulez. Après ce type d'importation, vous devez toujours filtrer spécifiquement sur les données de colonne pour vous assurer que vous n'avez rien d'inattendu.

Utilisez l'option colClasses de fread

Vous pouvez définir des classes de colonnes lors de l'importation - pour quelques colonnes seulement, pas toutes. Par exemple, la colonne de date dans ces données arrive sous forme de chaînes de caractères, même si elle est au format année-mois-jour. Nous pouvons définir la colonne nommée date sur le type de données Date  lors de l'importation à l'aide de l' colClassesoption. 

mydt <- fread ("us-counties.csv", colClasses = c ("date" = "Date"))

Maintenant, les dates sont des dates.

> str (mydt) Classes 'data.table' et 'data.frame': 322651 obs. de 6 variables: $ date: Date, format: "2020-01-21" "2020-01-22" "2020-01-23" ... $ comté: chr "Snohomish" "Snohomish" "Snohomish" "Cook "... $ state: chr" Washington "" Washington "" Washington "" Illinois "... $ fips: int 53061 53061 53061 17031 53061 6059 17031 53061 4013 6037 ... $ cases: int 1 1 1 1 1 1 1 1 1 1 ... $ décès: int 0 0 0 0 0 0 0 0 0 0 ...

Utilisez fread sur les fichiers zippés

Vous pouvez importer un fichier compressé sans le décompresser au préalable . fread peut importer directement des fichiers gz et bz2, tels que  mydt <- fread("myfile.gz"). Si vous devez importer un fichier zip, vous pouvez le décompresser avec la unzipcommande système dans fread, en utilisant la syntaxe  mydt <- fread(cmd = 'unzip -cq myfile.zip').

Pour plus de conseils sur R, rendez-vous sur la page Faire plus avec R.