2011-04-05 87 views
67

我想將現有數據框的列中的值轉換爲行名稱。是否可以在不導出數據幀的情況下執行此操作,然後使用row.names =調用重新導入它?將列中的值轉換爲現有數據框中的行名稱R

比如我想轉換:

> 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 

到:

> 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 

感謝

回答

92

這應該這樣做:

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

因此,在短期,無有是沒有選擇重新分配。

編輯:我糾正自己,你也可以做到這一點的地方:分配rowname屬性,然後刪除列:

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> 
+2

> rownames(DF)< - DF [1] 錯誤'row.names < - data.frame'('* TMP *',值=值): 無效「row.names '長度 另外:警告消息: 不建議在tibble上設置行名。 – user3673 2017-06-18 02:54:15

16

在一行

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

由於2016年你也可以使用tidyverse

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

更具體地說,它是'tibble :: column_to_rownames' – 2018-01-16 22:09:01