¿Cómo puedo convertir los nombres de las filas en la primera columna?
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?
O puedes usar tibble
's rownames_to_column
que 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()
Puede eliminar nombres de filas y convertirlos en una columna por referencia (sin reasignar memoria usando ->
) usando setDT
y su keep.rownames = TRUE
argumento del data.table
paquete.
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.
Una opción de una línea es:
df$names <- rownames(df)
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)