Ubah nilai dalam kolom menjadi nama baris dalam bingkai data yang sudah ada di R.


108

Saya ingin mengubah nilai dalam kolom dari bingkai data yang ada menjadi nama baris. Apakah mungkin untuk melakukan ini tanpa mengekspor bingkai data dan kemudian mengimpornya kembali dengan row.names =panggilan?

Misalnya saya ingin mengonversi:

 > 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

ke:

> 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

Terima kasih

Jawaban:


135

Ini harus dilakukan:

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

Jadi singkatnya, tidak ada alternatif untuk penugasan ulang.

Edit: Memperbaiki diri sendiri, Anda juga dapat melakukannya di tempat: tetapkan atribut rowname, lalu hapus kolom:

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] Error in row.names<-.data.frame( *tmp*, value = value): panjang 'row.names' tidak valid Selain itu: Pesan peringatan: Menyetel nama baris pada tibble sudah tidak digunakan lagi.
pengguna3673

36

Mulai 2016, Anda juga dapat menggunakan tidyverse.

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

1
Lebih khusus lagi, initibble::column_to_rownames
Ott Toomet

1
Saya mendapat peringatan "Menetapkan nama baris di tibble sudah tidak digunakan lagi"
Quantum7

1
visualisasi tibble tidak menampilkan nama domain, untuk melihatnya Anda perlu menyalurkannya ke as.data.frame ()samp %>% remove_rownames %>% column_to_rownames(var="names") %>% as.data.frame()
Matteo

22

dalam satu baris

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

11

Anda dapat menjalankan ini dalam 2 pernyataan sederhana:

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

Bekerja di R 3.5.3
TheSciGuy

5

Sepertinya one-liner menjadi lebih sederhana (saat ini menggunakan 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)

Kolom yang digunakan untuk nama baris dihapus secara otomatis.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.