열의 값을 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] Error in row.names<-.data.frame( *tmp*, value = value) : invalid 'row.names'length 추가 : 경고 메시지 : tibble에서 행 이름 설정이 더 이상 사용되지 않습니다.
user3673

36

2016 년부터는 tidyverse.

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

1
더 구체적으로 말하자면tibble::column_to_rownames
Ott Toomet

1
내가 경고 "는 tibble에 행 이름 설정이되지 않습니다"얻을
Quantum7

1
tibble 시각화)하지만, 당신이 (as.data.frame에 파이프 그것을 필요로 그것을보고, rownames를 표시하지 않습니다samp %>% remove_rownames %>% column_to_rownames(var="names") %>% as.data.frame()
마테오

22

한 줄로

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


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.