csv_path <- tempfile(fileext = ".csv") # your own path goes here: "data/cars.csv"
write.csv(head(mtcars[, 1:4], 6), csv_path, row.names = FALSE)
file.exists(csv_path)[1] TRUE
Charger un .csv ou un .txt délimité par tabulations dans un data frame — base R et readr, côte à côte
Lisez des fichiers CSV et texte dans R avec les fonctions base R read.csv(), read.table() et read.delim(), ou avec readr read_csv(), read_tsv() et read_delim(). Réglez le séparateur, l’en-tête, les types de colonnes, les marqueurs de valeurs manquantes, le séparateur décimal, et lisez directement depuis une URL — les deux méthodes présentées ensemble pour que vous puissiez choisir celle qui vous convient.
26 juin 2026
7 juillet 2026
read.csv("file.csv") pour les fichiers à virgules, read.delim("file.txt") pour les fichiers à tabulations — aucun package nécessaire.read_csv() / read_tsv() sont ~10× plus rapides, renvoient un tibble, et indiquent comment chaque colonne a été analysée.sep =/col_types =, header =/col_names =, na.strings =/na =, et skip =.;, décimale ,) : base read.csv2() ou readr read_csv2().Vous avez un export .csv ou un fichier .txt délimité par tabulations et vous devez le charger dans R comme data frame. Il existe deux méthodes que vous rencontrerez dans du code réel :
read.csv(), read.table(), read.delim(). Toujours disponible, aucun package à installer.read_csv(), read_tsv(), read_delim(). Plus rapide sur les gros fichiers, renvoie un tibble, et affiche un message clair indiquant comment chaque colonne a été analysée.Cette leçon présente les deux, côte à côte, pour les cas que vous rencontrez réellement : fichiers à virgules ou à tabulations, avec ou sans ligne d’en-tête, forçage des types de colonnes, marqueurs de valeurs manquantes inhabituels, fichiers européens ;/,, et lecture depuis une URL. Pour que chaque bloc s’exécute ici et dans votre navigateur, nous écrivons d’abord un petit fichier à partir d’un jeu de données intégré, puis nous le relisons — le code de lecture est exactement celui que vous lanceriez sur votre propre fichier.
read.csv() lit un fichier séparé par des virgules et renvoie un data frame. Elle suppose que la première ligne est un en-tête — les noms de colonnes en proviennent directement.
mpg cyl disp hp
1 21.0 6 160 110
2 21.0 6 160 110
3 22.8 4 108 93
4 21.4 6 258 110
5 18.7 8 360 175
6 18.1 6 225 105
Voilà toute la recette pour un .csv standard : un seul appel. Les colonnes arrivent typées — les nombres en numérique, le texte en caractère.
De façon interactive, read.csv(file.choose()) ouvre un sélecteur de fichiers pour vous éviter de saisir le chemin — pratique quand vous débutez. Et read.csv("data.csv") cherche dans votre répertoire de travail courant ; vérifiez-le avec getwd().
read.csv(), read.table() et read.delim()Ce sont la même fonction avec des valeurs par défaut différentes. Choisissez selon le format du fichier :
read.csv() — séparé par des virgules (sep = ","), en-tête activé.read.delim() — séparé par des tabulations (sep = "\t"), pour la plupart des exports .txt.read.table() — le moteur général ; réglez sep =, header =, dec = vous-même.Voici un .txt délimité par tabulations lu de trois façons équivalentes :
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
Pour tout autre délimiteur — un tube |, une espace — utilisez read.table() et réglez sep = sur ce caractère.
Dans l’ancien R (avant la version 4.0), read.csv() transformait silencieusement chaque colonne de texte en facteur — une source fréquente de confusion lorsque vous tentiez de modifier les chaînes. Le R moderne utilise par défaut stringsAsFactors = FALSE, donc le texte reste du texte. Réglez-le explicitement quand vous voulez en être sûr, ou sur une installation plus ancienne :
Les exports réels comportent souvent une ligne de commentaire en haut, et « manquant » peut être marqué par autre chose qu’un blanc — NA, ., -, ou N/A. Supprimez les lignes de tête avec skip = et listez chaque marqueur de valeur manquante dans na.strings = :
id score
1 1 88
2 2 NA
3 3 NA
skip = 1 supprime la ligne de commentaire pour que la ligne suivante devienne l’en-tête ; chaque valeur de na.strings est importée comme NA au lieu de texte.
Dans de nombreux pays, un CSV utilise ; comme séparateur de champs et , comme séparateur décimal (parce que la virgule est déjà prise). Lire un tel fichier avec un simple read.csv() le déforme. Utilisez read.csv2(), qui inverse les deux valeurs par défaut :
x y
1 1.5 2.5
2 3.0 4.0
Les valeurs arrivent comme de vrais nombres — 1,5 devient 1.5. De façon équivalente, read.table(file, sep = ";", dec = ",", header = TRUE).
Le package readr lit les mêmes fichiers mais est environ 10× plus rapide sur les gros volumes, renvoie un tibble (un data frame à l’affichage plus soigné), et vous indique exactement comment il a analysé chaque colonne. Les fonctions reflètent celles de base :
read_csv() — séparé par des virgules.read_tsv() — séparé par des tabulations.read_delim() — n’importe quel délimiteur, via delim =.read_csv2() — la variante européenne ; / ,.# A tibble: 6 × 4
mpg cyl disp hp
<dbl> <dbl> <dbl> <dbl>
1 21 6 160 110
2 21 6 160 110
3 22.8 4 108 93
4 21.4 6 258 110
5 18.7 8 360 175
6 18.1 6 225 105
La première ligne contient les noms de colonnes ; les étiquettes <dbl> sous chaque nom indiquent comment readr l’a analysée (dbl = nombre, chr = texte). Ce rapport d’analyse est l’atout de readr — vous voyez d’un coup d’œil si une colonne a bien le type que vous attendiez.
Un fichier à tabulations se lit avec read_tsv() ; un délimiteur personnalisé avec read_delim(file, delim = "|") :
# A tibble: 6 × 5
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
<dbl> <dbl> <dbl> <dbl> <chr>
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
col_typesQuand l’estimation de readr est fausse — une colonne d’ID lue comme un nombre perd ses zéros initiaux, ou un code se lit comme une date — fixez le type avec col_types =. Utilisez les codes à une lettre : "c" caractère, "i" entier, "d" double, "l" logique, "D" date, "_" ignorer.
# A tibble: 6 × 4
mpg cyl disp hp
<dbl> <int> <dbl> <int>
1 21 6 160 110
2 21 6 160 110
3 22.8 4 108 93
4 21.4 6 258 110
5 18.7 8 360 175
6 18.1 6 225 105
La forme abrégée read_csv(file, col_types = "didi") fonctionne aussi — une lettre par colonne, dans l’ordre.
Par défaut, readr ne traite que les chaînes vides comme NA. Ajoutez vos propres marqueurs avec na = :
# A tibble: 3 × 2
id score
<dbl> <dbl>
1 1 88
2 2 NA
3 3 NA
Si un fichier présente des problèmes d’analyse, readr vous avertit de leur nombre et vous pouvez les inspecter avec problems().
Les deux méthodes acceptent une adresse web à la place d’un chemin local — pratique pour un jeu de données publié que vous ne voulez pas télécharger à la main. (Cela nécessite une connexion internet, donc c’est présenté ici comme un modèle à copier plutôt qu’à exécuter sur la page.)
readr va plus loin : une URL se terminant par .gz, .bz2, ou .zip est téléchargée et décompressée automatiquement.
| base R | readr | |
|---|---|---|
| Installation requise | aucune | install.packages("readr") |
| Renvoie | data.frame |
tibble |
| Vitesse (gros fichiers) | plus lente | ~10× plus rapide |
| Retour sur l’analyse | aucun | rapport sur les types de colonnes |
| Virgule / tabulation / personnalisé | read.csv / read.delim / read.table |
read_csv / read_tsv / read_delim |
Européen ; , |
read.csv2 |
read_csv2 |
Pour une lecture rapide sur n’importe quelle machine sans installation, base R suffit. Pour les gros fichiers, un contrôle reproductible des types et le rapport d’analyse, readr est la valeur par défaut moderne — et c’est ce que le reste du tidyverse attend.
Les blocs ci-dessus se sont exécutés au moment de la génération. Modifiez celui-ci et appuyez sur Run — il écrit un petit CSV, puis le relit des deux façons, entièrement dans votre navigateur via webR (aucune installation).
Collez les premières lignes désordonnées de votre fichier et demandez à Prova « de quels arguments de lecture ai-je besoin — sep, skip, na, ou col_types ? » Elle écrit l’appel read_csv(), et comme le runtime est juste là, vous l’exécutez pour confirmer que les données arrivent correctement depuis votre fichier. Demander à Prova →
Vous travaillez en Python ? Un guide pandas read_csv arrive dans la série Python.
Tout le fichier a atterri dans une seule colonne. Le séparateur est incorrect. Un fichier européen délimité par ; lu avec read.csv() (qui attend ,) place chaque ligne dans une seule colonne — utilisez read.csv2() (ou read_csv2()), ou réglez sep = ";" dans read.table(). Vérifiez d’abord les lignes brutes avec readLines(path, n = 3).
Les nombres sont arrivés comme du texte, ou les décimales paraissent énormes. Un fichier utilisant , comme séparateur décimal (1,5) lu avec le dec = "." par défaut échoue à l’analyse ou lit 1,5 comme le texte "1,5". Utilisez read.csv2() / read_csv2(), ou passez dec = "," à read.table().
Une colonne de texte est devenue un facteur (ancien R). Avant R 4.0, read.csv() utilisait par défaut stringsAsFactors = TRUE, transformant les chaînes en facteurs. Si vous êtes sur une installation plus ancienne ou héritez d’un tel code, ajoutez stringsAsFactors = FALSE — ou passez à readr, qui ne le fait jamais.
Une colonne d’ID a perdu ses zéros initiaux. "00123" paraît numérique, donc est lu comme 123. Forcez-le en texte : base read.csv(file, colClasses = c(id = "character")), ou readr read_csv(file, col_types = cols(id = "c")).
Utilisez base R read.csv("file.csv") — elle lit un fichier séparé par des virgules dans un data frame, en prenant les noms de colonnes dans la première ligne. Pour une lecture plus rapide qui renvoie un tibble et indique comment chaque colonne a été analysée, installez readr et utilisez read_csv("file.csv"). Les deux cherchent dans votre répertoire de travail sauf si vous donnez un chemin complet.
Pour un .txt délimité par tabulations, utilisez base R read.delim("file.txt") ou readr read_tsv("file.txt"). Pour tout autre délimiteur, utilisez read.table("file.txt", sep = "|", header = TRUE) (base) ou read_delim("file.txt", delim = "|") (readr), en remplaçant "|" par votre séparateur.
read.csv() est de base R : aucune installation, renvoie un data.frame, plus lente sur les gros fichiers, ne donne aucun retour sur l’analyse. read_csv() vient de readr : ~10× plus rapide, renvoie un tibble, et affiche comment chaque colonne a été analysée. Elles lisent les mêmes fichiers — utilisez base R pour une lecture rapide sans configuration, readr pour la vitesse, le contrôle des types, et le tidyverse.
Utilisez read.csv2() (base R) ou read_csv2() (readr). Les deux attendent ; comme séparateur de champs et , comme séparateur décimal — la convention de nombreuses locales européennes. De façon équivalente, read.table(file, sep = ";", dec = ",", header = TRUE).
Passez l’adresse web là où vous passeriez un chemin de fichier : read.csv("https://example.com/data.csv") ou read_csv("https://example.com/data.csv"). readr télécharge et décompresse aussi automatiquement les URL .gz, .bz2 et .zip. Vous avez besoin d’une connexion internet.
Écrivez iris dans un .txt délimité par tabulations, puis relisez-le une fois avec base R (read.delim) et une fois avec readr (read_tsv). Confirmez que les deux ont les mêmes noms de colonnes.
library(readr)
path <- tempfile(fileext = ".txt")
write.table(head(iris, 5), path, sep = "\t", row.names = FALSE)
base_way <- read.delim(path)
readr_way <- read_tsv(path)
identical(names(base_way), names(readr_way)) # TRUE
; / , ?
Un fichier sépare les champs avec ; et utilise , pour les décimales. Lequel le lit correctement ?
A. read.csv("file.csv") B. read.csv2("file.csv") C. read.table("file.csv")
Afficher la réponse
B. read.csv2() règle sep = ";" et dec = "," — exactement la convention européenne. A utilise des séparateurs virgule et placerait chaque ligne dans une seule colonne. C utilise par défaut la séparation par espaces et ne découpera pas non plus sur ;. L’équivalent readr est read_csv2().
Lire des fichiers plats dans R se résume à deux jeux d’outils équivalents. Base R — read.csv() pour les fichiers à virgules, read.delim() pour les fichiers à tabulations, read.table() pour tout le reste, read.csv2() pour les données européennes — ne nécessite aucune installation. readr — read_csv(), read_tsv(), read_delim() — est plus rapide, renvoie un tibble, indique l’analyse, et fixe les types avec col_types =. Adaptez la fonction au séparateur, réglez na/skip pour les fichiers désordonnés, et les deux méthodes lisent directement depuis une URL.
.xls et .xlsx. · Enregistrer RDS et RData — stockez des objets R natifs pour que les types et les facteurs survivent. · Exporter des données depuis R — la vue d’ensemble complète pour sortir vos données (write.csv, write_csv). · Renommer des colonnes en R — nettoyez les noms juste après l’import.Prouvez que vous savez le faire. Maîtrisez toute la série Importer et exporter des données en R — suivez votre parcours, construisez des projets et obtenez un certificat.
Passez à Pro — Prova illimité sur vos propres données et un certificat vérifiable qui atteste la compétence.
dès 15 $/mois facturé annuellement
✓ Vous êtes Pro — continuez. The runtime is the judge.
Recevez les nouvelles leçons R & Python par e-mail
Pratique, reproductible, sans spam. Désinscription à tout moment.
Double opt-in. Nous ne partageons jamais votre e-mail.
Cette leçon est reproductible : chaque résultat de cette page a été produit par le code affiché — modifiez n’importe quel bloc et appuyez sur Run pour le reproduire dans votre navigateur. The runtime is the judge.
@online{2026,
author = {},
title = {Lire des fichiers CSV et texte en R : read.csv et readr},
date = {2026-06-26},
url = {https://www.datanovia.com/learn/programming/importing-exporting-data/read-csv-txt-in-r},
langid = {fr}
}