¿Cómo puedo convertir los nombres de las filas en la primera columna?

Resuelto Agaz Wani asked hace 54 años • 9 respuestas

Tengo un marco de datos como este:

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" 

Quiero convertir los nombres de las filas en la primera columna. Actualmente uso algo como esto para hacer nombres de filas como la primera columna:

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

¿Existe una sola línea para hacer esto?

Agaz Wani avatar Jan 01 '70 08:01 Agaz Wani
Aceptado

O puedes usar tibble's rownames_to_columnque hace lo mismo que la respuesta de David:

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

Nota: La función anterior llamada add_rownames()ha quedado obsoleta y está siendo reemplazada portibble::rownames_to_column()

hrbrmstr avatar Apr 08 '2015 10:04 hrbrmstr

Puede eliminar nombres de filas y convertirlos en una columna por referencia (sin reasignar memoria usando ->) usando setDTy su keep.rownames = TRUEargumento del data.tablepaquete.

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

Como lo mencionó @snoram, puede darle a la nueva columna cualquier nombre que desee; por ejemplo, setDT(df, keep.rownames = "newname")agregaría "nuevo nombre" como la columna de filas.

David Arenburg avatar Apr 08 '2015 09:04 David Arenburg

Una opción de una línea es:

df$names <- rownames(df)
Emily avatar Mar 18 '2016 12:03 Emily

Alternativamente, puede crear un nuevo marco de datos (o sobrescribir el actual, como en el ejemplo siguiente) para no necesitar utilizar ningún paquete externo. Sin embargo, esta forma puede no ser eficiente con marcos de datos enormes.

df <- data.frame(names = row.names(df), df)
drasc avatar Mar 30 '2017 17:03 drasc