행 이름을 첫 번째 열로 변환


147

다음과 같은 데이터 프레임이 있습니다.

df
              VALUE              ABS_CALL DETECTION P-VALUE    
    1007_s_at "957.729231881542" "P"      "0.00486279317241156"
    1053_at   "320.632701283368" "P"      "0.0313356324173416" 
    117_at    "429.842323161046" "P"      "0.0170004527476119" 
    121_at    "2395.7364289242"  "P"      "0.0114473584876183" 
    1255_g_at "116.493632746934" "A"      "0.39799368200131"   
    1294_at   "739.927122116896" "A"      "0.0668649772942343" 

행 이름을 첫 번째 열로 변환하고 싶습니다. 현재 행 이름을 첫 번째 열로 만들기 위해 다음과 같은 것을 사용합니다.

  d <- df
  names <- rownames(d)
  rownames(d) <- NULL
  data <- cbind(names,d)

이 작업을 수행 할 수있는 단일 회선이 있습니까?



12
추가 패키지가 필요하지 않습니다. 다음은 단일 라이너입니다.d <- cbind(rownames(d), data.frame(d, row.names=NULL))
ssp3nc3r

@ ssp3nc3r의 의견은 허용되는 답변이어야합니다
Hrant

답변:


119

할 수 있습니다 모두 삭제 행 이름과 컬럼으로 변환 참조 (사용 메모리 재 할당없이 ->사용) setDT과 그 keep.rownames = TRUE으로부터 인수를 data.table패키지

library(data.table)
setDT(df, keep.rownames = TRUE)[]
#    rn     VALUE  ABS_CALL DETECTION     P.VALUE
# 1:  1 1007_s_at  957.7292         P 0.004862793
# 2:  2   1053_at  320.6327         P 0.031335632
# 3:  3    117_at  429.8423         P 0.017000453
# 4:  4    121_at 2395.7364         P 0.011447358
# 5:  5 1255_g_at  116.4936         A 0.397993682
# 6:  6   1294_at  739.9271         A 0.066864977

@snoram이 언급했듯이 새 열에 원하는 이름을 지정할 수 있습니다. 예를 들어 setDT(df, keep.rownames = "newname")행 열로 "newname"을 추가하십시오.


5
colnames(df)[1] <- "newname"필요한 경우 첫 번째 열의 이름을 바꾸는 데 사용하십시오 .
Swetabh

5
@Swetabh 글쎄요. setnames(df, 1, "newname")는 IS data.table방법.
David Arenburg

@DavidArenburg 글쎄, (적어도) 이제 같은 전화로 할 수 있습니다setDT(df, keep.rownames = "newname")[]
sindri_baldur

1
@DavidArenburg에 대한 문서에서 찾을 수 있습니다 as.data.table(). TRUE 인 경우 입력 개체 이름을 "rn"이라는 별도의 열로 추가합니다. keep.rownames = "ID"항목의 이름 대신 "ID"
sindri_baldur

1
@ snoram good find, 나는 문서의 일관성을 유지하기 위해 PR을 만들 것입니다.
David Arenburg

140

또는 당신은 사용할 수 dplyradd_rownames다윗의 대답과 같은 일을한다 :

library(dplyr)
df <- tibble::rownames_to_column(df, "VALUE")

업데이트 (2016 년 중반) : (위에 통합)

호출 된 이전 함수 add_rownames()는 더 이상 사용되지 않으며 tibble::rownames_to_column()(동일한 함수이지만 Hadley dplyr가 약간 리팩토링 )로 대체하고 있습니다.


14
아니 정확히 같은, 그것은 그 일을하지 있기 때문에 참조 :
데이비드 Arenburg

1
업데이트 : dplyr :: rownames는 더 이상 사용되지 않으므로 dplyr 업데이트에서는 tibble :: rownames_to_column ()을 사용해야합니다.
EDennnis

하나는 tidyverse 내에서 유지하고자 할 때 중대하다
Euler_Salter

83

한 줄 옵션은 다음과 같습니다.

df$names <- rownames(df)

12
rownames마지막 열이 아니라 첫 번째 열이 아니라는 사실을 알고 있기를 바랍니다 .
Agaz Hussain

30

또는 새 데이터 프레임을 만들거나 아래 예와 같이 현재 데이터 프레임을 덮어 쓸 수 있으므로 외부 패키지를 사용할 필요가 없습니다. 그러나이 방법은 거대한 데이터 프레임에서 효율적이지 않을 수 있습니다.

df <- data.frame(names = row.names(df), df)

10
또는 :df <- cbind(names = rownames(df), df)
마크 밀러

15

위의 제안에 따라 내 의견을 답변으로 옮겼습니다.

추가 패키지가 필요하지 않습니다. 여기 하나의 라이너가 있습니다.

d <- cbind(rownames(d), data.frame(d, row.names=NULL))

4

dplyr::as_data_frame(df, rownames = "your_row_name") 더 간단한 결과를 제공합니다.


2
@HectorHaffenden은 실제로 좋은 제안이기 때문에 포스터를 위해 이것을 편집했습니다.
Tjebo

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.