Ik'probeer een data.frame te initialiseren zonder rijen. In principe wil ik de datatypes voor elke kolom specificeren en ze een naam geven, maar geen rijen laten aanmaken als resultaat.
Het beste wat ik tot nu toe heb kunnen doen is zoiets als:
df <- data.frame(Date=as.Date("01/01/2000", format="%m/%d/%Y"),
File="", User="", stringsAsFactors=FALSE)
df <- df[-1,]
Dat creëert een data.frame met een enkele rij die alle datatypes en kolomnamen bevat die ik wilde, maar creëert ook een nutteloze rij die vervolgens moet worden verwijderd.
Is er een betere manier om dit te doen?
initialiseer het gewoon met lege vectoren:
df <- data.frame(Date=as.Date(character()),
File=character(),
User=character(),
stringsAsFactors=FALSE)
Hier's een ander voorbeeld met verschillende kolomtypes :
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. :
Het initialiseren van een data.frame
met een lege kolom van het verkeerde type verhindert niet verdere toevoegingen van rijen met kolommen van verschillende types.
Deze methode is alleen wat veiliger in de zin dat je vanaf het begin de juiste kolomtypes hebt, dus als je code vertrouwt op een kolomtype-controle, zal het werken, zelfs met een data.frame
met nul rijen.
Je zou read.table
met een lege string voor de invoer text
als volgt kunnen gebruiken:
colClasses = c("Date", "character", "character")
col.names = c("Date", "File", "User")
df <- read.table(text = "",
colClasses = colClasses,
col.names = col.names)
Een alternatief is om de col.names
als een string op te geven:
df <- read.csv(text="Date,File,User", colClasses = colClasses)
Met dank aan Richard Scriven voor de verbetering