Saya memiliki bingkai data seperti ini:
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"
Saya ingin mengubah nama baris menjadi kolom pertama. Saat ini saya menggunakan sesuatu seperti ini untuk membuat nama baris sebagai kolom pertama:
d <- df
names <- rownames(d)
rownames(d) <- NULL
data <- cbind(names,d)
Apakah ada satu baris untuk melakukan ini?
d <- cbind(rownames(d), data.frame(d, row.names=NULL))
Jawaban:
Anda berdua dapat menghapus nama baris dan mengubahnya menjadi kolom dengan referensi (tanpa mengalokasikan kembali memori menggunakan
->
) menggunakansetDT
dankeep.rownames = TRUE
argumennya daridata.table
paketlibrary(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
Seperti yang disebutkan oleh @snoram, Anda dapat memberi kolom baru nama apa pun yang Anda inginkan, misalnya
setDT(df, keep.rownames = "newname")
menambahkan "nama baru" sebagai kolom baris.sumber
colnames(df)[1] <- "newname"
untuk mengganti nama kolom pertama jika diperlukan.setnames(df, 1, "newname")
adalahdata.table
jalannya.setDT(df, keep.rownames = "newname")[]
as.data.table()
: Jika BENAR, tambahkan nama objek input sebagai kolom terpisah bernama "rn". keep.rownames = "id" menamai kolom "id" sebagai gantinyaAtau Anda dapat menggunakan
dplyr
'sadd_rownames
yang melakukan hal yang sama dengan jawaban David:library(dplyr) df <- tibble::rownames_to_column(df, "VALUE")
UPDATE (pertengahan 2016): (digabungkan dengan yang di atas)
fungsi lama yang dipanggil
add_rownames()
sudah tidak digunakan lagi dan digantikan olehtibble::rownames_to_column()
(fungsi yang sama, tapi Hadleydplyr
sedikit di- refactored ).sumber
Opsi satu baris adalah:
sumber
rownames
sebagai kolom pada akhirnya, memang bukan sebagai kolom pertama.Sebagai alternatif, Anda dapat membuat kerangka data baru (atau menimpa yang sekarang, seperti contoh di bawah) sehingga Anda tidak perlu menggunakan paket eksternal apa pun. Namun cara ini mungkin tidak efisien dengan kerangka data yang besar.
sumber
df <- cbind(names = rownames(df), df)
Memindahkan komentar saya menjadi jawaban per saran di atas:
Anda tidak memerlukan paket tambahan, ini satu baris:
d <- cbind(rownames(d), data.frame(d, row.names=NULL))
sumber
dplyr::as_data_frame(df, rownames = "your_row_name")
akan memberi Anda hasil yang lebih sederhana.sumber
Atau dengan menggunakan
DBI
ssqlRownamesToColumn
library(DBI) sqlRownamesToColumn(df)
sumber