Chuyển các giá trị trong cột thành tên hàng trong khung dữ liệu hiện có trong R


108

Tôi muốn chuyển đổi các giá trị trong một cột của khung dữ liệu hiện có thành tên hàng. Có thể làm điều này mà không cần xuất khung dữ liệu và sau đó nhập lại nó bằng một row.names =cuộc gọi không?

Ví dụ, tôi muốn chuyển đổi:

 > 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

thành:

> 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

cảm ơn

Câu trả lời:


135

Điều này nên làm:

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

Vì vậy, tóm lại, không có giải pháp thay thế cho việc phân công lại.

Chỉnh sửa: Tự mình sửa lại, người ta cũng có thể làm điều đó tại chỗ: gán thuộc tính tên hàng, sau đó xóa cột:

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] Lỗi trong row.names<-.data.frame( *tmp*, value = value): độ dài 'row.names' không hợp lệ Ngoài ra: Thông báo cảnh báo: Việc đặt tên hàng trên một mẩu nhỏ không được dùng nữa.
user3673

36

Kể từ năm 2016, bạn cũng có thể sử dụng tidyverse.

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

1
Cụ thể hơn, đó làtibble::column_to_rownames
Ott Toomet

1
Tôi nhận được một cảnh báo "Thiết lập tên hàng trên tibble bị phản đối"
Quantum7

1
visualization tibble không hiển thị rownames, tuy nhiên, để xem nó, bạn cần phải ống nó để as.data.frame ()samp %>% remove_rownames %>% column_to_rownames(var="names") %>% as.data.frame()
Matteo

22

trong một dòng

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

11

Bạn có thể thực hiện điều này trong 2 câu lệnh đơn giản:

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

Hoạt động trong R 3.5.3
TheSciGuy

5

Có vẻ như một lớp lót thậm chí còn đơn giản hơn dọc theo dòng (hiện đang sử dụng 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)

Cột được sử dụng cho tên hàng sẽ tự động bị xóa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.