このようなデータフレームがあります。
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行がありますか?
あなたは両方行名を削除して参照によって列に変換することができます (->
を使用してメモリーを再割り当てすることなく)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"を追加します。
あるいはdplyr
のadd_rownames
を使うこともできます。これはDavidの答えと同じです。
library(dplyr)
df <- tibble::rownames_to_column(df, "VALUE")
更新(2016年半ば):(上記に組み込まれる)
add_rownames()
と呼ばれる古い関数は廃止され、tibble::rownames_to_column()
に置き換えられています(同じ関数ですが、Hadleyはdplyr
を少しリファクタリングしました)。
1行のオプションは以下のとおりです。
df$names <- rownames(df)
別の方法として、新しいデータフレームを作成する(または下の例のように現在のデータフレームを上書きする)ことができるので、外部パッケージを使用する必要はありません。しかし、この方法は巨大なデータフレームでは効率的ではないかもしれません。
df <- data.frame(names = row.names(df), df)
私のコメントを上記の提案ごとの回答に移動しました。
追加のパッケージは必要ありません。これはワンライナーです。
d <- cbind(rownames(d), data.frame(d, row.names=NULL))
as_data_frame(df, rownames = "your_row_name")
はあなたにさらに単純な結果を与えるでしょう。