web-dev-qa-db-fra.com

Convertir les valeurs d’une colonne en noms de lignes dans un bloc de données existant dans R

J'aimerais convertir les valeurs d'une colonne d'un cadre de données existant en noms de lignes. Il est possible de le faire sans exporter le cadre de données puis le réimporter avec un fichier row.names = appel?

Par exemple, j'aimerais 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

merci

90
KennyPeanuts

Cela devrait faire:

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

En bref, non, il n’ya pas d’alternative à la réaffectation.

Edit: En me corrigeant, on peut aussi le faire à la place: attribuez les attributs rowname, puis supprimez 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> 
114

À partir de 2016, vous pouvez également utiliser le tidyverse.

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

en une ligne

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

Vous pouvez exécuter ceci en 2 déclarations simples:

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

Il semble que le one-liner soit encore plus simple le long de la ligne (en utilisant actuellement la R 3.5.3):

# generate original data.frame
df <- data.frame(a = letters[1:10], b = 1:10, c = LETTERS[1:10])
# use first column for row names
df <- data.frame(df, row.names = 1)

La colonne utilisée pour les noms de ligne est supprimée automatiquement.

1
stragu