web-dev-qa-db-ja.com

行名を最初の列に変換

このようなデータフレームがあります。

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)

これを行うための1行がありますか?

99
Agaz Hussain

あなたは両方行名を削除して参照によって列に変換することができます->を使用してメモリーを再割り当てすることなく)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"を追加します。

87
David Arenburg

あるいはdplyradd_rownamesを使うこともできます。これはDavidの答えと同じです。

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

更新(2016年半ば):(上記に組み込まれる)

add_rownames()と呼ばれる古い関数は廃止され、tibble::rownames_to_column()に置き換えられています(同じ関数ですが、Hadleyはdplyrを少しリファクタリングしました)。

94
hrbrmstr

1行のオプションは以下のとおりです。

df$names <- rownames(df)
61
Emily

別の方法として、新しいデータフレームを作成する(または下の例のように現在のデータフレームを上書きする)ことができるので、外部パッケージを使用する必要はありません。しかし、この方法は巨大なデータフレームでは効率的ではないかもしれません。

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

私のコメントを上記の提案ごとの回答に移動しました。

追加のパッケージは必要ありません。これはワンライナーです。

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

as_data_frame(df, rownames = "your_row_name")はあなたにさらに単純な結果を与えるでしょう。

0
SteveS