© 2025 Tous droits réservés
Dans R, les rownames
correspondent à des noms de lignes sur les data frames (tableaux de données).
Le plus souvent, les rownames sont simplement des numéros de lignes, comme dans le jeu de données iris
:
View(iris)
Mais parfois certains jeux de données contiennent de “vrais” rownames ; c’est par exemple le cas des données decathlon
présentes dans le package FactoMineR
qui contiennent le nom des athlètes :
#install.packages("FactoMineR")
library(FactoMineR)
data(decathlon)
View(decathlon)
Les rownames sont ensuite utilisés dans les graphiques générés par certaines fonctions pour mettre des étiquettes sur les points. C’est le cas, par exemple de la fonction PCA()
du package FactoMineR
qui génère un plot des individus, et lorsque les rownames sont les noms des athlètes, cela permet de les identifier ensuite facilement :
library(FactoMineR)
plot.PCA(PCA(decathlon[,1:10]), choix=c("ind"))
Lorsqu’on analyse des données dans R, il est parfois préférable d’avoir une information contenue dans des rownames, plutôt que dans une variable, et dans d’autres situations, c’est l’inverse : il est préférable d’avoir l’information dans une variable, plutôt que dans des rownames.
Il est donc important de savoir manipuler ces rownames.
Dans cet article, je vais vous montrer :
Pour cela, le plus facile est d’employer la fonction rownames_to_column()
du package tibble
(contenu dans le package tidyverse)
. Dans l’exemple ci-dessous, je crée un data frame nommé « decath » à partir des données decathlon, et en créant la variable « Athlet » à partir des rownames
:
library(tidyverse)
decath <- decathlon %>%
rownames_to_column(var="Athlet")
head(decath)
## Athlet 100m Long.jump Shot.put High.jump 400m 110m.hurdle Discus
## 1 SEBRLE 11.04 7.58 14.83 2.07 49.81 14.69 43.75
## 2 CLAY 10.76 7.40 14.26 1.86 49.37 14.05 50.72
## 3 KARPOV 11.02 7.30 14.77 2.04 48.37 14.09 48.95
## 4 BERNARD 11.02 7.23 14.25 1.92 48.93 14.99 40.87
## 5 YURKOV 11.34 7.09 15.19 2.10 50.42 15.31 46.26
## 6 WARNERS 11.11 7.60 14.31 1.98 48.68 14.23 41.10
## Pole.vault Javeline 1500m Rank Points Competition
## 1 5.02 63.19 291.7 1 8217 Decastar
## 2 4.92 60.15 301.5 2 8122 Decastar
## 3 4.92 50.31 300.2 3 8099 Decastar
## 4 5.32 62.77 280.1 4 8067 Decastar
## 5 4.72 63.44 276.4 5 8036 Decastar
## 6 4.92 51.77 278.1 6 8030 Decastar
La variable « Athlet » a été créé en première position.
On peut facilement réaliser la manipulation inverse, en employant la fonction column_to_rownames()
:
decath2 <- decath %>%
column_to_rownames(var="Athlet")
head(decath2)
## 100m Long.jump Shot.put High.jump 400m 110m.hurdle Discus Pole.vault
## SEBRLE 11.04 7.58 14.83 2.07 49.81 14.69 43.75 5.02
## CLAY 10.76 7.40 14.26 1.86 49.37 14.05 50.72 4.92
## KARPOV 11.02 7.30 14.77 2.04 48.37 14.09 48.95 4.92
## BERNARD 11.02 7.23 14.25 1.92 48.93 14.99 40.87 5.32
## YURKOV 11.34 7.09 15.19 2.10 50.42 15.31 46.26 4.72
## WARNERS 11.11 7.60 14.31 1.98 48.68 14.23 41.10 4.92
## Javeline 1500m Rank Points Competition
## SEBRLE 63.19 291.7 1 8217 Decastar
## CLAY 60.15 301.5 2 8122 Decastar
## KARPOV 50.31 300.2 3 8099 Decastar
## BERNARD 62.77 280.1 4 8067 Decastar
## YURKOV 63.44 276.4 5 8036 Decastar
## WARNERS 51.77 278.1 6 8030 Decastar
Ici, les données « mydata » contiennent une variable « nom » que je souhaite passer en rownames directement au moment de l’importation :
Pour passer la variable nom directement en rownames lors de l’importation, j’emploie l’argument row.names=
de la fonction read.csv2()
, comme ceci :
mydata <- read.csv2("data/mydata.csv", row.names="nom")
head(mydata)
## maths francais anglais sciences histoire_geo
## tintin 15 12 16 11 18
## milou 14 6 14 12 13
## dupont 13 10 14 9 16
## dupond 15 7 15 13 14
Il est aussi important de savoir gérer les rownames lors de l’exportation. Par défaut, les rownames sont exportés via la création d’une variable en première position.
# export avec rownames
write.csv2(mydata, "data/mydata_avec_rownames.csv")
Ici les noms étaient stockés en rownames et lors de l’exportation, ils apparaissent dans la première colonne du fichier csv.
Si, au contraire, vous ne souhaitez pas exporter les rownames, il est nécessaire d’employer l’argument row.names = FALSE.
write.csv2(mydata, "data/mydata_sans_rownames.csv", row.names = FALSE)
Ici, les noms qui étaient stockés dans les rownames n’ont pas été exportés (ils sont perdus).
Dans ma pratique courante, je m’en sers surtout pour exporter des data frame dont les rownames sont seulement les numéros des lignes ; cela me permet de ne pas obtenir une variable supplémentaire avec ces numéros de ligne :
head(iris)
## 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
# export avec rownames
write.csv2(iris, "data/iris_avec_rownames.csv")
Ici, lorsque j’exporte les données « iris », sans rien préciser concernant les rownames, dans la fonction write.csv2()
, les rownames (qui sont simplement les numéros des lignes) sont exportés via la création d’une nouvelle colonne en première position.
En revanche, si je précise row.names=FALSE
, dans la fonction write.csv2(),
alors cela me permet de ne pas créer cette première colonne avec les numéros des lignes qui ne me sert à rien !
# export sans rownames
write.csv2(iris, "data/iris_sans_rownames.csv", row.names = FALSE)
J’espère que ce court article vous permettra de mieux comprendre cette notion de rownames et de les manipuler plus facilement.
Dites moi en commentaire si vous employez d’autres fonctions liées à ses rownames !
Si vous souhaitez soutenir mon travail, vous pouvez faire un don libre sur la page tipeee du blog :
© 2025 Tous droits réservés
Enregistrez vous pour recevoir gratuitement mes fiches « aide mémoire » (ou cheat sheets) qui vous permettront de réaliser facilement les principales analyses biostatistiques avec le logiciel R et pour être informés des mises à jour du site.
2 réponses
Bonjour,
Je voudrais vous dire que les contennu que son partagées dans ce blog son trés interessant.
Merci pour les contennus
Merci !