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.able
est 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.able
mais modifiez un groupe d'arguments par défaut.
Méfiez-vous quelire.able
est un moyen inefficace de lire dans de très grandes matrices numériques: voiranalyse
ci-dessous.
Certaines des questions à considérer sont:
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….
Ligne de tête
Nous vous recommandons de spécifier le
entête
Argument 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 commeread.table ("file.dat", en-tête = true, row.names = 1)
Les noms de colonne peuvent être donnés explicitement via le
Noms de colon
;Les noms explicites remplacent la ligne d'en-tête (si présente).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éfaut
sé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'utiliser
séparie = "\ t"
.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 le
citation
argument.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.
Par défaut, le fichier est supposé contenir la chaîne de caractères
N / A
pour 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 valeurs
Dans
,Infirme
et-Inf
sont acceptés.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 fichiers
remplir = vrai
.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'argument
strip.white = true
.Lignes vides
Par défaut,
lire.able
ignore 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.Classes pour les variables
Sauf si vous prenez des mesures spéciales,
lire.able
Lire 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érique
etcomplexe
, 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.Arguments
colcasse
etcomme si
fournir un plus grand contrôle.En précisantas.is = true
supprime la conversion des vecteurs de caractère en facteurs (uniquement).En utilisantcolcasse
Permet 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 que
colcasse
etcomme si
sont spécifiésparcolonne, pasparvariable, et incluez ainsi la colonne des noms de lignes (le cas échéant).commentaires
Par défaut,
lire.able
utilise «#» 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) à utiliser
comment.char = “"
.É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 deux
lire.able
etanalyse
avoir 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, \ v
et des représentations octales et hexadécimales comme\ 040
et\ 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\ uxxxx
ne sont jamais interprétés.Codage
Cela peut être spécifié par le
codes de filen
Argument, par exemplefileencoding = "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 qui
déposer
rapporte commeintro.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.csv
etlire.delim
faire des arguments àlire.able
approprié pour CSV et des fichiers délimités par TAB exportés à partir de feuilles de calcul dans des lieux anglophones.Les variationslire.csv2
etread.delim2
sont 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.able
sont 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 = “"
,colcasse
comme 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.fwf
Fournit 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 commeperler
pour prétraiter le fichier.
Fonctionlecture
est 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.dif
Fournit un moyen simple de lire ces fichiers.Il faut des arguments similaires àlire.able
pour 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 Utilisationanalyse
directement
Les deuxlire.able
etlire.fwf
utiliseranalyse
pour lire le fichier, puis traiter les résultats deanalyse
.Ils sont très pratiques, mais parfois il vaut mieux utiliseranalyse
directement.
Fonctionanalyse
a 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 lecture
Ce 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 deanalyse
est 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,analyse
a pris 9 secondes alors quelire.able
a 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 utiliserempiler
Pour 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égager
va 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...
Leremodeler
La fonction a une syntaxe plus compliquée queempiler
mais peut être utilisé pour les données où la forme «longue» a plus que la seule colonne de cet exemple.AvecDirection = "large"
,remodeler
peut é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 RUcbadmissions
qui 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.fable
pour 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.fable
a 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.able
pour lire dans les données et créer le tableau d'urgence à partir de cextabs
.