J'ai une trame de données comme celle-ci:
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"
Je veux convertir les noms de ligne dans la première colonne. Actuellement, j'utilise quelque chose comme ça pour créer des noms de lignes comme première colonne:
d <- df
names <- rownames(d)
rownames(d) <- NULL
data <- cbind(names,d)
Y a-t-il une seule ligne pour faire cela?
d <- cbind(rownames(d), data.frame(d, row.names=NULL))
Réponses:
Vous pouvez à la fois supprimer les noms de lignes et les convertir en colonne par référence (sans réallouer la mémoire à l'aide de
->
) en utilisantsetDT
et sonkeep.rownames = TRUE
argument dudata.table
packageComme mentionné par @snoram, vous pouvez donner à la nouvelle colonne le nom que vous voulez, par exemple
setDT(df, keep.rownames = "newname")
ajouter "nouveau nom" comme colonne de lignes.la source
colnames(df)[1] <- "newname"
pour renommer la première colonne si nécessaire.setnames(df, 1, "newname")
est ledata.table
chemin.setDT(df, keep.rownames = "newname")[]
as.data.table()
: Si TRUE, ajoute les noms de l'objet d'entrée dans une colonne distincte nommée "rn". keep.rownames = "id" nomme la colonne "id" à la placeOu vous pouvez utiliser
dplyr
'sadd_rownames
qui fait la même chose que la réponse de David:MISE À JOUR (mi-2016): (incorporée à ce qui précède)
l'ancienne fonction appelée
add_rownames()
est obsolète et est remplacée partibble::rownames_to_column()
(mêmes fonctions, mais Hadley a étédplyr
un peu remaniée ).la source
Une option d'une ligne est:
la source
rownames
comme colonne à la fin, en fait pas comme première colonne.Vous pouvez également créer une nouvelle trame de données (ou écraser la trame actuelle, comme dans l'exemple ci-dessous) afin de ne pas avoir besoin d'utiliser de package externe. Cependant, cette méthode peut ne pas être efficace avec d'énormes trames de données.
la source
df <- cbind(names = rownames(df), df)
J'ai déplacé mon commentaire dans une réponse par suggestion ci-dessus:
Vous n'avez pas besoin de paquets supplémentaires, voici un one-liner:
la source
dplyr::as_data_frame(df, rownames = "your_row_name")
vous donnera un résultat encore plus simple.la source
Ou en utilisant
DBI
ssqlRownamesToColumn
la source