2015-04-08 9 views
55

ich einen Datenrahmen wie dieses:Konvertieren Zeilennamen in die erste Spalte

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 der ersten Spalte konvertieren. Momentan benutze ich etwas wie diesen, 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?

+0

mögliches Duplikat von [R: Reihennamen in mehr Datenrahmen zu Spalte in Datenrahmen Umwandeln] (http://stackoverflow.com/questions/18403199/r-converting-row-names-in-multiple- Data-Frames-zu-Spalte-in-Daten-Frame) – rmuc8

+0

Sie brauchen keine zusätzlichen Pakete, hier ist ein Einzeiler: 'd <- cbind (rownames (d), data.frame (d, row.names = NULL)) ' – ssp3nc3r

Antwort

51

Sie können beiden entfernen Zeilennamen und wandeln sie in eine Spalte durch Verweis (ohne Speicher -> mit Neuzuweisung) mit setDT und seinem keep.rownames = TRUE Argumente vom data.table Paket

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 
+3

Verwenden Sie' 'colnames (df) [1] <-" newname "' ', um die erste Spalte bei Bedarf umzubenennen. – Swetabh

+3

@Swetabh Nun, nein. 'setnames (df, 1," newname ")' ist der 'data.table' Weg. –

57

Oder Sie verwenden können, dplyr ‚s add_rownames das macht das gleiche wie David Antwort:

library(dplyr) 
df <- add_rownames(df, "VALUE") 

UPDATE (Mitte 2016):

add_rownames() ist veraltet und wird durch tibble::rownames_to_column() ersetzt wird (dieselben Funktionen, aber Hadley refactored dplyr a bit).

+11

Nicht * genau * das selbe, weil es es nicht * per Referenz macht * :) –

36

A eine Zeile Option ist:

df$names <- rownames(df) 
+3

Ich hoffe, Sie sind sich der Tatsache bewusst, dass es 'roownames' als Spalte bei der letzten, ja nicht als erste Spalte hinzufügt. –

+0

Guter Punkt. Also, nicht so ein Liner, immerhin. :) – Emily

+2

Wie unterscheidet sich das von dem OP schon? Sie wussten schon von "rownames", oder? Sie wollten es aber am Anfang sagen. –

3

Alternativ können Sie einen neuen Datenrahmen erstellen (oder die aktuelle überschrieben werden, wie das Beispiel unten), so müssen Sie nicht von einem externen Paket verwenden. Dieser Weg ist jedoch bei großen Datenrahmen möglicherweise nicht effizient.

df <- data.frame(names = row.names(df), df) 
+0

Oder: 'df <- cbind (name = rownames (df), df)' –

Verwandte Themen