604 Stimmen

Erstellen Sie einen leeren data.frame

Ich versuche, einen data.frame ohne Zeilen zu initialisieren. Im Grunde möchte ich die Datentypen für jede Spalte angeben und sie benennen, aber keine Zeilen als Ergebnis erstellen lassen.

Das Beste, was ich bisher machen konnte, ist so etwas wie:

df <- data.frame(Date=as.Date("01/01/2000", format="%m/%d/%Y"), 
                 File="", User="", stringsAsFactors=FALSE)
df <- df[-1,]

Dadurch wird ein data.frame mit einer einzigen Zeile erstellt, die alle gewünschten Datentypen und Spaltennamen enthält, aber es wird auch eine nutzlose Zeile erstellt, die dann entfernt werden muss.

Gibt es eine bessere Möglichkeit, dies zu tun?

794voto

digEmAll Punkte 54672

Initialisieren Sie ihn einfach mit leeren Vektoren:

df <- data.frame(Date=as.Date(character()),
                 File=character(), 
                 User=character(), 
                 stringsAsFactors=FALSE) 

Hier ist ein weiteres Beispiel mit verschiedenen Spaltentypen:

df <- data.frame(Doubles=double(),
                 Ints=integer(),
                 Factors=factor(),
                 Logicals=logical(),
                 Characters=character(),
                 stringsAsFactors=FALSE)

str(df)
> str(df)
'data.frame':   0 obs. of  5 variables:
 $ Doubles   : num 
 $ Ints      : int 
 $ Factors   : Factor w/ 0 levels: 
 $ Logicals  : logi 
 $ Characters: chr 

N.B.:

Initialisierung einer data.frame mit einer leeren Spalte des falschen Typs verhindert nicht das weitere Hinzufügen von Zeilen mit Spalten unterschiedlichen Typs.
Diese Methode ist nur ein bisschen Sicherer in dem Sinne, dass Sie von Anfang an die korrekten Spaltentypen haben. Wenn sich Ihr Code also auf eine Spaltentypprüfung stützt, wird er auch mit einer data.frame mit null Zeilen.

208voto

toto_tico Punkte 15863

Wenn Sie bereits einen bestehenden Datenrahmen haben sagen wir mal df die die gewünschten Spalten enthält, können Sie einfach einen leeren Datenrahmen erstellen, indem Sie alle Zeilen entfernen:

empty_df = df[FALSE,]

Beachten Sie, dass df enthält immer noch die Daten, aber empty_df nicht.

Ich habe diese Frage gefunden, als ich danach suchte, wie man eine neue Instanz mit leeren Zeilen erstellen kann, und ich denke, sie könnte für einige Leute hilfreich sein.

90voto

zeleniy Punkte 2204

Sie können dies ohne Angabe von Spaltentypen tun

df = data.frame(matrix(vector(), 0, 3,
                dimnames=list(c(), c("Date", "File", "User"))),
                stringsAsFactors=F)

70voto

Rentrop Punkte 19808

Sie könnten verwenden read.table mit einer leeren Zeichenkette für die Eingabe text wie folgt:

colClasses = c("Date", "character", "character")
col.names = c("Date", "File", "User")

df <- read.table(text = "",
                 colClasses = colClasses,
                 col.names = col.names)

Alternativ kann auch die Angabe der col.names als Zeichenkette:

df <- read.csv(text="Date,File,User", colClasses = colClasses)

Dank an Richard Scriven für die Verbesserung

56voto

Daniel Fischer Punkte 929

Erklären Sie einfach

table = data.frame()

wenn Sie versuchen rbind in der ersten Zeile werden die Spalten erstellt

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X