Jeg prøver å initialisere en data.frame uten rader. I utgangspunktet vil jeg spesifisere datatypene for hver kolonne og navngi dem, men ikke ha noen rader opprettet som et resultat.
Det beste jeg har klart å gjøre så langt er noe sånt som:
df <- data.frame(Date=as.Date("01/01/2000", format="%m/%d/%Y"),
File="", User="", stringsAsFactors=FALSE)
df <- df[-1,]
Som oppretter en data.frame med en enkelt rad som inneholder alle datatypene og kolonnenavnene jeg ønsket, men oppretter også en ubrukelig rad som deretter må fjernes.
Finnes det en bedre måte å gjøre dette på?
Bare initialiser den med tomme vektorer:
df <- data.frame(Date=as.Date(character()),
File=character(),
User=character(),
stringsAsFactors=FALSE)
Her er et annet eksempel med forskjellige 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 av en data.frame
med en tom kolonne av feil type forhindrer ikke ytterligere tilføyelser av rader med kolonner av forskjellige typer.
Denne metoden er bare litt tryggere i den forstand at du vil ha de riktige kolonnetypene fra begynnelsen, og hvis koden din er avhengig av en eller annen kolonnetypekontroll, vil den fungere selv med en data.frame
med null rader.
Du kan bruke read.table
med en tom streng for input text
som følger:
colClasses = c("Date", "character", "character")
col.names = c("Date", "File", "User")
df <- read.table(text = "",
colClasses = colClasses,
col.names = col.names)
Alternativt kan du spesifisere col.names
som en streng:
df <- read.csv(text="Date,File,User", colClasses = colClasses)
Takk til Richard Scriven for forbedringen