Jeg forsøger at initialisere en data.frame uden nogen rækker. Dybest set vil jeg angive datatyperne for hver kolonne og navngive dem, men ikke have nogen rækker oprettet som et resultat.
Det bedste jeg har været i stand til at gøre indtil videre er noget i stil med:
df <- data.frame(Date=as.Date("01/01/2000", format="%m/%d/%Y"),
File="", User="", stringsAsFactors=FALSE)
df <- df[-1,]
Hvilket skaber en data.frame med en enkelt række, der indeholder alle de datatyper og kolonnenavne, jeg ønskede, men skaber også en ubrugelig række, som derefter skal fjernes.
Er der en bedre måde at gøre dette på?
Du skal blot initialisere den med tomme vektorer:
df <- data.frame(Date=as.Date(character()),
File=character(),
User=character(),
stringsAsFactors=FALSE)
Her er et andet eksempel med forskellige kolonnetyper :
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. :
Initialisering af en data.frame
med en tom kolonne af den forkerte type forhindrer ikke yderligere tilføjelser af rækker med kolonner af forskellige typer.
Denne metode er bare lidt sikkerere i den forstand, at du har de korrekte kolonnetyper fra begyndelsen, og hvis din kode derfor er afhængig af en kolonnetypekontrol, vil den fungere selv med en data.frame
med nul rækker.
Du kan bruge read.table
med en tom streng som input text
på følgende måde:
colClasses = c("Date", "character", "character")
col.names = c("Date", "File", "User")
df <- read.table(text = "",
colClasses = colClasses,
col.names = col.names)
Alternativt kan du angive col.names
som en streng:
df <- read.csv(text="Date,File,User", colClasses = colClasses)
Tak til Richard Scriven for forbedringen