Ich habe einen Datenrahmen wie diesen:
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"
Ich möchte die Zeilennamen in die erste Spalte konvertieren. Derzeit verwende ich so etwas, um Zeilennamen als erste Spalte zu erstellen:
d <- df
names <- rownames(d)
rownames(d) <- NULL
data <- cbind(names,d)
Gibt es eine einzige Zeile, um dies zu tun?
d <- cbind(rownames(d), data.frame(d, row.names=NULL))
Antworten:
Sie können Zeilennamen sowohl entfernen als auch in eine Spalte konvertieren, indem Sie sie mit ihrem Argument aus dem Paket referenzieren (ohne den Speicher neu zuzuweisen
->
)setDT
keep.rownames = TRUE
data.table
Wie von @snoram erwähnt, können Sie der neuen Spalte einen beliebigen Namen geben, z. B.
setDT(df, keep.rownames = "newname")
"newname" als Zeilenspalte hinzufügen.quelle
colnames(df)[1] <- "newname"
diese Option, um die erste Spalte bei Bedarf umzubenennen.setnames(df, 1, "newname")
ist derdata.table
Weg.setDT(df, keep.rownames = "newname")[]
as.data.table()
: Wenn TRUE, werden die Namen des Eingabeobjekts als separate Spalte mit dem Namen "rn" hinzugefügt. keep.rownames = "id" benennt stattdessen die Spalte "id"Oder Sie können
dplyr
'sadd_rownames
verwenden, die dasselbe tun wie Davids Antwort:UPDATE (Mitte 2016): (oben aufgenommen)
Die alte aufgerufene Funktion
add_rownames()
ist veraltet und wird ersetzt durchtibble::rownames_to_column()
(dieselben Funktionen, aber Hadley hat siedplyr
ein wenig überarbeitet ).quelle
Eine einzeilige Option ist:
quelle
rownames
als letzte Spalte hinzugefügt wird, in der Tat nicht als erste Spalte.Alternativ können Sie einen neuen Datenrahmen erstellen (oder den aktuellen überschreiben, wie im folgenden Beispiel gezeigt), sodass Sie kein externes Paket verwenden müssen. Dieser Weg ist jedoch bei großen Datenrahmen möglicherweise nicht effizient.
quelle
df <- cbind(names = rownames(df), df)
Mein Kommentar wurde in eine Antwort gemäß dem obigen Vorschlag verschoben:
Sie benötigen keine zusätzlichen Pakete, hier ist ein Einzeiler:
quelle
dplyr::as_data_frame(df, rownames = "your_row_name")
Sie erhalten ein noch einfacheres Ergebnis.quelle
Oder mit
DBI
ssqlRownamesToColumn
quelle