列の値をRの既存のデータフレームの行名に変換する


108

既存のデータフレームの列の値を行名に変換したいと思います。データフレームをエクスポートせずに、row.names =呼び出しで再インポートせずにこれを行うことはできますか?

たとえば、私は変換したいと思います:

 > 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

ありがとう

回答:


135

これは行う必要があります:

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

つまり、要するに、再割り当ての代替手段はありません。

編集:自分自身を修正して、適切な場所で行うこともできます:行名属性を割り当ててから、列を削除します:

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] row.names<-.data.frame*tmp*、value = value)のエラー:「row.names」の長さが無効ですさらに:警告メッセージ:ティブルでの行名の設定は非推奨です。
user3673 2017年

36

2016以降、も使用できますtidyverse

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

1
より具体的には、それはtibble::column_to_rownames
Ott Toomet 2018年

1
「ティブルへの行名の設定は非推奨です」という警告が表示されます
Quantum7

1
tibble可視化)あなたはそれが(as.data.frameするパイプに必要なそれを見るために、けれども、rownamesが表示されないsamp %>% remove_rownames %>% column_to_rownames(var="names") %>% as.data.frame()
マッテオ



5

ワンライナーがラインに沿ってさらに単純になったようです(現在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)

行名に使用される列は自動的に削除されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.