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 fila en la primera columna. Actualmente utilizo algo como esto para hacer nombres de fila como la primera columna:
  d <- df
  names <- rownames(d)
  rownames(d) <- NULL
  data <- cbind(names,d)¿Hay una sola línea para hacer esto?

d <- cbind(rownames(d), data.frame(d, row.names=NULL))Respuestas:
Puede ambos nombres de las filas quitar y convertirlos a una columna de referencia (sin reasignación de memoria utilizando
->) utilizandosetDTy sukeep.rownames = TRUEargumento deldata.tablepaqueteComo mencionó @snoram, puede darle a la nueva columna el nombre que desee, por ejemplo
setDT(df, keep.rownames = "newname"), agregaría "nombre nuevo" como columna de filas.fuente
colnames(df)[1] <- "newname"para cambiar el nombre de la primera columna si es necesario.setnames(df, 1, "newname")es eldata.tablecaminosetDT(df, keep.rownames = "newname")[]as.data.table(): Si es VERDADERO, agrega los nombres del objeto de entrada como una columna separada llamada "rn". keep.rownames = "id" nombra la columna "id" en su lugarO puede usar
dplyr'sadd_rownamesque hace lo mismo que la respuesta de David:ACTUALIZACIÓN (mediados de 2016): (incorporado a lo anterior)
función antigua llamada
add_rownames()ha quedado en desuso y está siendo reemplazada portibble::rownames_to_column()(mismas funciones, pero Hadley refactorizódplyrun poco).fuente
Una opción de una línea es:
fuente
rownamescomo una columna al final, de hecho no como una primera columna.Alternativamente, puede crear un nuevo marco de datos (o sobrescribir el actual, como el ejemplo a continuación) para que no necesite usar ningún paquete externo. Sin embargo, esta forma puede no ser eficiente con grandes marcos de datos.
fuente
df <- cbind(names = rownames(df), df)Moví mi comentario a una respuesta por sugerencia anterior:
No necesita paquetes adicionales, aquí hay una línea:
fuente
dplyr::as_data_frame(df, rownames = "your_row_name")te dará un resultado aún más simple.fuente
O al usar
DBIssqlRownamesToColumnfuente