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 tun konnte, ist etwas wie:
df <- data.frame(Date=as.Date("01/01/2000", format="%m/%d/%Y"),
File="", User="", stringsAsFactors=FALSE)
df <- df[-1,]
Damit 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?
Initialisieren Sie ihn einfach mit leeren Vektoren:
df <- data.frame(Date=as.Date(character()),
File=character(),
User=character(),
stringsAsFactors=FALSE)
Hier's ein anderes 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. :
Die Initialisierung eines 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 richtigen Spaltentypen haben. Wenn sich Ihr Code also auf eine Spaltentypprüfung verlässt, wird er auch mit einem data.frame
mit null Zeilen funktionieren.
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)
Sie könnten read.table
mit einer leeren Zeichenkette für die Eingabe text
wie folgt verwenden:
colClasses = c("Date", "character", "character")
col.names = c("Date", "File", "User")
df <- read.table(text = "",
colClasses = colClasses,
col.names = col.names)
Alternativ kann man auch die col.names
als String angeben:
df <- read.csv(text="Date,File,User", colClasses = colClasses)
Dank an Richard Scriven für die Verbesserung