170 votes

Convertir les valeurs d'une colonne en noms de lignes dans une trame de données existante

Je voudrais convertir les valeurs d'une colonne d'une trame de données existante en noms de lignes. Est-il possible de le faire sans exporter la trame de données puis de la réimporter avec un appel row.names = ?

Par exemple, je voudrais convertir :

 > samp 
     names Var.1 Var.2 Var.3
 1     A     1     5     0
 2     B     2     4     1
 3     C     3     3     2
 4     D     4     2     3
 5     E     5     1     4

Dans :

> samp.with.rownames 
     Var.1 Var.2 Var.3
A     1     5     0
B     2     4     1
C     3     3     2
D     4     2     3
E     5     1     4

181voto

Dirk Eddelbuettel Points 134700

Cela devrait faire :

samp2 <- samp[,-1]
rownames(samp2) <- samp[,1]

Bref, il n'y a pas d'alternative à la réaffectation.

Édition : En me corrigeant, on peut aussi le faire en place : assigner des attributs rowname, puis supprimer la colonne :

R> df<-data.frame(a=letters[1:10], b=1:10, c=LETTERS[1:10])
R> rownames(df) <- df[,1]
R> df[,1] <- NULL
R> df
   b c
a  1 A
b  2 B
c  3 C
d  4 D
e  5 E
f  6 F
g  7 G
h  8 H
i  9 I
j 10 J
R> 

96voto

Joe Points 2572

Depuis 2016, vous pouvez également utiliser le tidyverse.

library(tidyverse)
samp %>% remove_rownames %>% column_to_rownames(var="names")

28voto

nigelhenry Points 31

en une ligne

> samp.with.rownames <- data.frame(samp[,-1], row.names=samp[,1])

13voto

victor8910 Points 93

Vous pouvez exécuter ceci en 2 instructions simples :

row.names(samp) <- samp$names
samp[1] <- NULL

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X