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?

1voto

d8aninja Punkte 2798

Diese Frage bezog sich nicht speziell auf meine Bedenken (die aquí ), aber für den Fall, dass jemand dies mit einer parametrisierten Anzahl von Spalten und ohne Zwang tun möchte:

> require(dplyr)
> dbNames <- c('a','b','c','d')
> emptyTableOut <- 
    data.frame(
        character(), 
        matrix(integer(), ncol = 3, nrow = 0), stringsAsFactors = FALSE
    ) %>% 
    setNames(nm = c(dbNames))
> glimpse(emptyTableOut)
Observations: 0
Variables: 4
$ a <chr> 
$ b <int> 
$ c <int> 
$ d <int>

Wie divibisan in der verlinkten Frage feststellt,

...der Grund für das Auftreten von [Zwang] [bei der Bindung von Matrizen und ihren konstituierenden Typen] ist, dass eine Matrix nur einen einzigen Datentyp haben kann. Wenn Sie 2 Matrizen cbinden, ist das Ergebnis immer noch eine Matrix und daher werden die Variablen alle in einen einzigen Typ gezwungen, bevor Konvertierung in einen data.frame

1voto

jpmarindiaz Punkte 1459

Angenommen, Ihre Spaltennamen sind dynamisch, dann können Sie eine leere Matrix mit Zeilennamen erstellen und sie in einen Datenrahmen umwandeln.

nms <- sample(LETTERS,sample(1:10))
as.data.frame(t(matrix(nrow=length(nms),ncol=0,dimnames=list(nms))))

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