R Importation / exportation des données (2024)

DansExporter vers les fichiers texteNous avons vu un certain nombre de variations sur le format d'un fichier texte de type table de calcul, dans lequel les données sont présentées dans une grille rectangulaire, éventuellement avec des étiquettes de lignes et de colonnes.Dans cette section, nous considérons l'importation de ces fichiers dans R.

2.1 Variations surlire.able

La fonctionlire.ableest le moyen le plus pratique de lire dans une grille rectangulaire de données.En raison des nombreuses possibilités, il existe plusieurs autres fonctions qui appellentlire.ablemais modifiez un groupe d'arguments par défaut.

Méfiez-vous quelire.ableest un moyen inefficace de lire dans de très grandes matrices numériques: voiranalyseci-dessous.

Certaines des questions à considérer sont:

  1. Codage

    Si le fichier contient des champs de caractères non ASCII, assurez-vous qu'il est lu dans le codage correct.Il s'agit principalement d'un problème de lecture de fichiers latin-1 dans un lieu de l'UTF-8, qui peut être fait par quelque chose comme

    read.table ("file.dat", fileencoding = "latin1")

    Notez que cela fonctionnera dans n'importe quel lieu qui peut représenter les cordes latines-1, mais pas beaucoup de lieux grecs / russes / chinois / japonais….

  2. Ligne de tête

    Nous vous recommandons de spécifier leentêteArgument explicitement, conventionnellement, la ligne d'en-tête a des entrées uniquement pour les colonnes et non pour les étiquettes de ligne, il est donc un champ plus court que les lignes restantes.(Si R voit cela, il définitEn-tête = vrai.) Si vous êtes présenté avec un fichier qui a un champ d'en-tête (peut-être vide) pour les étiquettes de ligne, lisez-le par quelque chose comme

    read.table ("file.dat", en-tête = true, row.names = 1)

    Les noms de colonne peuvent être donnés explicitement via leNoms de colon;Les noms explicites remplacent la ligne d'en-tête (si présente).

  3. Séparateur

    Normalement, l'examen du fichier déterminera le séparateur de champ à utiliser, mais avec les fichiers séparés dans l'espace blanc, il peut y avoir un choix entre la valeur par défautséparie = “"qui utilise n'importe quel espace blanc (espaces, onglets ou nouvelles lignes) comme séparateur,sep = ""etsep = ”\ t".Notez que le choix du séparateur affecte l'entrée des chaînes citées.

    Si vous avez un fichier délimité par onglet contenant des champs vides, assurez-vous d'utiliserséparie = "\ t".

  4. Citation

    Par défaut, les chaînes de caractères peuvent être citées par «« »ou« », et dans chaque cas, tous les caractères jusqu'à un devis correspondant sont pris dans le cadre de la chaîne de caractères.L'ensemble de caractères de citation valide (qui pourrait être nul) est contrôlé par lecitationargument.Poursep = ”\ n“La valeur par défaut est changée enquote = ”“.

    Si aucun caractère de séparateur n'est spécifié, les citations peuvent être échappées dans des chaînes citées en les précédant immédiatement par «\», c-style.

    Si un caractère séparateur est spécifié, les citations peuvent être échappées dans les chaînes citées en les doubler, comme c'est le cas conventionnel dans les feuilles de calcul.Par exemple

    'Une chaîne n'est pas deux', "une de plus"

    peut être lu par

    read.table ("testfile", sep = ",")

    Cela ne fonctionne pas avec le séparateur par défaut.

  5. Valeurs manquantes

    Par défaut, le fichier est supposé contenir la chaîne de caractèresN / Apour représenter les valeurs manquantes, mais cela peut être modifié par l'argumentna.strings, qui est un vecteur d'une ou plusieurs représentations de caractères des valeurs manquantes.

    Les champs vides dans les colonnes numériques sont également considérés comme des valeurs manquantes.

    Dans les colonnes numériques, les valeursDans,Infirmeet-Infsont acceptés.

  6. Lignes non remplies

    Il est assez courant qu'un fichier exporté à partir d'une feuille de calcul pour que tous les champs vides de traîne (et leurs séparateurs) soient omis.Pour lire ce jeu de fichiersremplir = vrai.

  7. Espace blanc dans les champs de caractère

    Si un séparateur est spécifié, l'espace blanc en tête et traînant dans les champs de caractère est considéré comme faisant partie du champ.Pour dépouiller l'espace, utilisez l'argumentstrip.white = true.

  8. Lignes vides

    Par défaut,lire.ableignore les lignes vides.Cela peut être modifié en réglantblank.lines.skip = false, qui ne sera utile qu'en conjonction avecremplir = vrai, peut-être pour utiliser des lignes vierges pour indiquer les cas manquants dans une disposition régulière.

  9. Classes pour les variables

    Sauf si vous prenez des mesures spéciales,lire.ableLire toutes les colonnes en tant que vecteurs de caractères, puis essaie de sélectionner une classe appropriée pour chaque variable dans le cadre de données.Il essaie à son tourlogique,entier,numériqueetcomplexe, passer à autre chose si une entrée n'est pas manquante et ne peut pas être convertie.3Si tous ces éléments échouent, la variable est convertie en un facteur.

    Argumentscolcasseetcomme sifournir un plus grand contrôle.En précisantas.is = truesupprime la conversion des vecteurs de caractère en facteurs (uniquement).En utilisantcolcassePermet de définir la classe souhaitée pour chaque colonne de l'entrée: elle sera plus rapide et utilisera moins de mémoire.

    Noter quecolcasseetcomme sisont spécifiésparcolonne, pasparvariable, et incluez ainsi la colonne des noms de lignes (le cas échéant).

  10. commentaires

    Par défaut,lire.ableutilise «#» comme personnage de commentaire, et si cela est rencontré (sauf dans les chaînes citées), le reste de la ligne est ignoré.Les lignes ne contenant que l'espace blanc et un commentaire sont traités comme des lignes vierges.

    S'il est connu qu'il n'y aura pas de commentaires dans le fichier de données, il est plus sûr (et peut être plus rapide) à utilisercomment.char = “".

  11. Évasion

    De nombreux OSE ont des conventions pour l'utilisation de barre arrière comme caractère d'échappement dans les fichiers texte, mais Windows n'utilise pas (et utilise des barres d'arrière-plan dans les noms de chemin).Il est facultatif dans R si ces conventions sont appliquées aux fichiers de données.

    Les deuxlire.ableetanalyseavoir un argument logiquepermettre.Ceci est faux par défaut, et les barres oblidviennes ne sont ensuite interprétées que comme (dans des circonstances décrites ci-dessus) des citations d'échappement.Si cet ensemble est vrai, les évasions de style C sont interprétées, à savoir les caractères de contrôle\ a, \ b, \ f, \ n, \ r, \ t, \ vet des représentations octales et hexadécimales comme\ 040et\ 0x2a.Tout autre caractère échappé est traité comme lui-même, y compris la barre oblique inverse.Notez que Unicode s'échappe tel que\ uxxxxne sont jamais interprétés.

  12. Codage

    Cela peut être spécifié par lecodes de filenArgument, par exemple

    fileencoding = "ucs-2le" # Windows ‘Unicode’ filesFileencoding = "UTF-8"

    Si vous savez (correctement) le codage du fichier, cela fonctionnera presque toujours.Cependant, nous connaissons une exception, les fichiers UTF-8 avec une nomenclature.Certaines personnes affirment que les fichiers UTF-8 ne devraient jamais avoir de nomenclature, mais certains logiciels (incluant apparemment Excel: Mac) les utilisent, et de nombreux OSUS-aliments ne les acceptent pas.Ainsi face à un fichier quidéposerrapporte comme

    intro.dat: UTF-8 Unicode (avec BOM)

    il peut être lu sur Windows par

    read.table ("intro.dat", fileencoding = "utf-8")

    Mais sur un Unix-alike pourrait avoir besoin

    read.table ("intro.dat", fileencoding = "utf-8-bom")

    (Cela fonctionnerait très probablement sans spécifier un codage dans un lieu de l'UTF-8.)

Fonctions de commoditélire.csvetlire.delimfaire des arguments àlire.ableapproprié pour CSV et des fichiers délimités par TAB exportés à partir de feuilles de calcul dans des lieux anglophones.Les variationslire.csv2etread.delim2sont appropriés pour une utilisation dans les lieux où la virgule est utilisée pour le point décimal et (pourlire.csv2) pour les feuilles de calcul qui utilisent des demi-colons pour séparer les champs.

Si les options pourlire.ablesont spécifiés de manière incorrecte, le message d'erreur sera généralement du formulaire

Erreur dans SCAN (fichier = fichier, quoi = quoi, sept SEP = SEP,: la ligne 1 n'avait pas 5 éléments

ou

Erreur dans read.Table ("files.dat", en-tête = true): plus de colonnes que les noms de colonnes

Cela peut donner suffisamment d'informations pour trouver le problème, mais la fonction auxiliairecount.peut être utile pour enquêter davantage.

L'efficacité peut être importante lors de la lecture de grandes réseaux de données.Il aidera à spécifiercomment.char = “",colcassecomme l'un des types de vecteurs atomiques (logique, entier, numérique, complexe, caractère ou peut-être brut) pour chaque colonne, et pour donnernrows, le nombre de lignes à lire (et une surestimation légère vaut mieux que de ne pas le spécifier du tout).Voir les exemples dans les sections ultérieures.

2.2 Fichiers à largeur fixe

Parfois, les fichiers de données n'ont pas de délimiteurs de champ mais ont des champs dans des colonnes prédéfinies.Cela était très courant à l'époque des cartes perforées, et est encore parfois utilisée pour enregistrer l'espace des fichiers.

Fonctionlire.fwfFournit un moyen simple de lire ces fichiers, spécifiant un vecteur de largeurs de champ.La fonction lit le fichier en mémoire sous forme de lignes entières, divise les chaînes de caractères résultantes, écrit un fichier séparé temporaire, puis appellelire.able.Ceci est suffisant pour les petit* fichiers, mais pour quelque chose de plus compliqué, nous vous recommandons d'utiliser les installations d'une langue commeperlerpour prétraiter le fichier.

Fonctionlectureest une fonction similaire pour les fichiers à format fixe, en utilisant des spécifications de colonne de style Fortran.

2.3 Format d'échange de données (DIF)

Un ancien format parfois utilisé pour les données de type table de calcul est DIF ou format d'échange de données.

Fonctionlire.difFournit un moyen simple de lire ces fichiers.Il faut des arguments similaires àlire.ablepour attribuer des types à chacune des colonnes.

Sous Windows, les programmes de feuille de calcul stockent souvent les données de feuille de calcul copiées dans le presse-papiers dans ce format;read.dif («presse-papiers»)peut le lire directement à partir de là.C'est un peu plus robuste queread.table («presse-papiers»)dans la manipulation des feuilles de calcul avec des cellules vides.

2.4 Utilisationanalysedirectement

Les deuxlire.ableetlire.fwfutiliseranalysepour lire le fichier, puis traiter les résultats deanalyse.Ils sont très pratiques, mais parfois il vaut mieux utiliseranalysedirectement.

Fonctionanalysea de nombreux arguments, dont la plupart nous avons déjà couvertlire.able.L'argument le plus crucial estquoi, qui spécifie une liste de modes de variables à lire à partir du fichier.Si la liste est nommée, les noms sont utilisés pour les composants de la liste retournée.Les modes peuvent être numériques, caractère ou complexes, et sont généralement spécifiés par un exemple, par ex.0,""ou0i.Par exemple

cat ("2 3 5 7", "11 13 17 19", file = "ex.dat", sep = "\ n") scan (file = "ex.dat", quoi = liste (x = 0, y= "", z = 0), flush = true)

Renvoie une liste avec trois composants et rejette la quatrième colonne du fichier.

Il y a une fonctionlignes de lectureCe qui sera plus pratique si tout ce que vous voulez est de lire les lignes entières dans R pour un traitement ultérieur.

Une utilisation courante deanalyseest de lire dans une grande matrice.Supposons que le fichier matrix.dat ne contient que les nombres d'une matrice 200 x 2000.Ensuite, nous pouvons utiliser

A <- matrix (scan ("matrix.dat", n = 200 * 2000), 200, 2000, byrow = true)

Sur un test, cela a pris 1 seconde (sous Linux, 3 secondes sous Windows sur la même machine) alors que

A <- as.matrix (read.table ("matrix.dat"))

a pris 10 secondes (et plus de mémoire), et

A <- as.matrix (read.table ("matrix.dat", en-tête = false, nrows = 200, comment.char = "", colclasses = "numérique")))

a pris 7 secondes.La différence est presque entièrement due aux frais généraux de la lecture 2000 colonnes courtes distinctes: étaient-elles de la longueur 2000,analysea pris 9 secondes alors quelire.ablea pris 18 s'ils sont utilisés efficacement (en particulier, spécifiantcolcasse) et 125 s'il est utilisé naïvement.

Notez que les horaires peuvent dépendre du type de lecture et des données.Envisagez de lire un million d'entiers distincts:

écrivains (as.character ((1 + 1e6): 2e6), "ints.dat") xi <- scan ("int.dat", quoi = entier (0), n = 1e6) # .77SXN <- scan (scan (scan (scan (scan (scan (scan (scan (Scan ("ints.dat", quoi = numérique (0), n = 1e6) # .93SXC <- Scan ("ints.dat", quoi = caractères (0), n = 1e6) # .85SXF <- as.factor (xc) # .2sdf <- read.Table ("ints.dat") # .5S

et un million d'exemples d'un petit ensemble de codes:

Code <- c ("lmh", "sjc", "chch", "spc", "som") writelines (sampon (code, 1e6, remplacer = true), "code.dat") y <- scan ("code.dat ", quoi = caractères (0), n = 1e6) # .44Syf <- as.factor (y) # .21Sdf <- read.table (" code.dat ") # .9SDF <- read.Table("code.dat", nrows = 1e6) # .6s

Notez que ces horaires dépendent fortement du système d'exploitation (les lectures de base dans Windows prennent au moins deux fois plus longtemps que ces temps linux) et à l'état précis du collecteur des ordures.

2.5 Données de remontée

Parfois, les données de feuille de calcul sont dans un format compact qui donne les covariables pour chaque sujet suivi de toutes les observations sur ce sujet.Les fonctions de modélisation de R nécessitent des observations dans une seule colonne.Considérez l'échantillon suivant de données à partir de mesures de cerveau IRM répétées

Statut Age V1 V2 V3 V4 P 23646 45190 50333 55166 56271 CC 26174 35535 38227 37911 41184 CC 27723 25691 25712 26144 26398 CC 27193 30949 29693 29754 30772 CC 24370 4273 CC 28359 58591 58803 59435 61292 CC 25136 45801 45389 47197 47126

Il y a deux covariables et jusqu'à quatre mesures sur chaque sujet.Les données ont été exportées d'Excel en tant que fichier mr.csv.

On peut utiliserempilerPour aider à manipuler ces données pour donner une seule réponse.

zz <- read.csv ("mr.csv", strip.white = true) zzz <- cbind (zz [gl (nrow (zz), 1, 4 * nrow (zz)), 1: 2], pile (zz [, 3: 6]))

avec résultat

Valeurs d'âge d'état INDX1 P 23646 45190 V1X2 CC 26174 35535 V1X3 CC 27723 25691 V1X4 CC 27193 30949 V1X5 CC 24370 50542 V1X6 CC 28359 58591 V1X7 CC 25136 45801 V1X1

Fonctiondégagerva dans la direction opposée et peut être utile pour exporter des données.

Une autre façon de le faire est d'utiliser la fonctionremodeler, par

> Reshape (zz, idvar = "id", timevar = "var", variant = list (c ("v1", "v2", "v3", "v4")), direction = "long") status Âge varV1 ID1.1 P 23646 1 45190 12,1 CC 26174 1 35535 23,1 CC 27723 1 25691 34,1 CC 27193 1 30949 45.1 CC 24370 1 50542 56.1 CC 28359 1.2.2 P 23646 CC 26174 2 38227 2...

LeremodelerLa fonction a une syntaxe plus compliquée queempilermais peut être utilisé pour les données où la forme «longue» a plus que la seule colonne de cet exemple.AvecDirection = "large",remodelerpeut également effectuer la transformation opposée.

Certaines personnes préfèrent les outils dans les forfaitsremodeler,Reshape2etémoussé.

2.6 Tables de contingence plate

Afficher les tables de contingence plus dimensionnelle sous forme de tableau est généralement plutôt gênant.Dans l'analyse catégorique des données, ces informations sont souvent représentées sous la forme de tableaux bidimensionnels bordés avec des lignes et des colonnes principales spécifiant la combinaison de niveaux de facteur correspondant au nombre de cellules.Ces lignes et colonnes sont généralement «en lambeaux» dans le sens où les étiquettes ne sont affichées que lorsqu'elles changent, avec la convention évidente que les lignes sont lues de haut en bas et que les colonnes sont lues de gauche à droite.Dans R, de telles tables de contingence «plates» peuvent être créées en utilisantftable,qui crée des objets de classe«FTABLE»avec une méthode d'impression appropriée.

À titre d'exemple simple, considérez l'ensemble de données standard RUcbadmissionsqui est un tableau d'urgence tridimensionnel résultant de la classification des candidats aux études supérieures à l'UC Berkeley pour les six plus grands départements en 1973 classés par admission et sexe.

> Données (UCBADMISSIONS)> FTABLE (UCBADMISSIONS) DEPT A B C D E FADMIT SETIN

La représentation imprimée est clairement plus utile que d'afficher les données en tant que tableau tridimensionnel.

Il y a aussi une fonctionlire.fablepour lire dans des tables de contingence de type plat à partir de fichiers.Cela a des arguments supplémentaires pour traiter les variantes sur la façon dont les informations sur les noms et les niveaux et niveaux des variables de colonne sont représentés.La page d'aide pourlire.fablea quelques exemples utiles.Les tables plates peuvent être converties en tables de contingence standard sous forme de tableau en utilisantAS.Table.

Notez que les tables plates sont caractérisées par leur affichage «en lambeaux» d'étiquettes de ligne (et peut-être aussi de colonne).Si la grille complète des niveaux des variables de ligne est donnée, il faut utiliser à la placelire.ablepour lire dans les données et créer le tableau d'urgence à partir de cextabs.

R Importation / exportation des données (2024)
Top Articles
Latest Posts
Article information

Author: Wyatt Volkman LLD

Last Updated:

Views: 6568

Rating: 4.6 / 5 (46 voted)

Reviews: 85% of readers found this page helpful

Author information

Name: Wyatt Volkman LLD

Birthday: 1992-02-16

Address: Suite 851 78549 Lubowitz Well, Wardside, TX 98080-8615

Phone: +67618977178100

Job: Manufacturing Director

Hobby: Running, Mountaineering, Inline skating, Writing, Baton twirling, Computer programming, Stone skipping

Introduction: My name is Wyatt Volkman LLD, I am a handsome, rich, comfortable, lively, zealous, graceful, gifted person who loves writing and wants to share my knowledge and understanding with you.