Konvertieren Sie die Werte in einer Spalte in Zeilennamen in einem vorhandenen Datenrahmen in R.


108

Ich möchte die Werte in einer Spalte eines vorhandenen Datenrahmens in Zeilennamen konvertieren. Ist dies möglich, ohne den Datenrahmen zu exportieren und ihn dann mit einem row.names =Aufruf erneut zu importieren ?

Zum Beispiel möchte ich konvertieren:

 > 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

in:

> 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

Vielen Dank

Antworten:


135

Dies sollte tun:

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

Kurz gesagt, nein, es gibt keine Alternative zur Neuzuweisung.

Bearbeiten: Wenn ich mich korrigiere, kann man es auch an Ort und Stelle tun: Rowname-Attribute zuweisen, dann Spalte entfernen:

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> 

4
> rownames (df) <- df [, 1] Fehler in row.names<-.data.frame( *tmp*, value = value): ungültige 'row.names'-Länge Zusätzlich: Warnmeldung: Das Festlegen von Zeilennamen in einem Tibble ist veraltet.
user3673

36

Ab 2016 können Sie auch die tidyverse.

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

1
Genauer gesagt ist estibble::column_to_rownames
Ott Toomet

1
Ich erhalte die Warnung "Das Festlegen von Zeilennamen auf einem Tibble ist veraltet"
Quantum7

1
Die tibble-Visualisierung zeigt jedoch keine Rownamen an. Um sie zu sehen, müssen Sie sie an as.data.frame () weiterleitensamp %>% remove_rownames %>% column_to_rownames(var="names") %>% as.data.frame()
Matteo

22

in einer Zeile

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

11

Sie können dies in 2 einfachen Anweisungen ausführen:

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

Funktioniert in R 3.5.3
TheSciGuy

5

Es sieht so aus, als wäre der Einzeiler auf der ganzen Linie noch einfacher geworden (derzeit wird R 3.5.3 verwendet):

# 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)

Die für Zeilennamen verwendete Spalte wird automatisch entfernt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.