Snažím sa inicializovať data.frame bez riadkov. V podstate chcem určiť dátové typy pre každý stĺpec a pomenovať ich, ale nechcem, aby sa vytvorili žiadne riadky.
Najlepšie, čo sa mi zatiaľ podarilo urobiť, je niečo také:
df <- data.frame(Date=as.Date("01/01/2000", format="%m/%d/%Y"),
File="", User="", stringsAsFactors=FALSE)
df <- df[-1,]
Čo vytvorí data.frame s jedným riadkom obsahujúcim všetky typy údajov a názvy stĺpcov, ktoré som chcel, ale vytvorí aj zbytočný riadok, ktorý je potom potrebné odstrániť.
Existuje lepší spôsob, ako to urobiť?
Inicializujte ho prázdnymi vektormi:
df <- data.frame(Date=as.Date(character()),
File=character(),
User=character(),
stringsAsFactors=FALSE)
Tu'je ďalší príklad s rôznymi typmi stĺpcov :
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. :
Inicializácia data.frame
s prázdnym stĺpcom nesprávneho typu nebráni ďalšiemu pridávaniu riadkov so stĺpcami rôznych typov.
Táto metóda je len o niečo bezpečnejšia v tom zmysle, že od začiatku budete mať správne typy stĺpcov, preto ak sa váš kód spolieha na nejakú kontrolu typu stĺpcov, bude fungovať aj s data.frame
s nulovými riadkami.
Môžete použiť read.table
s prázdnym reťazcom pre vstupný text
takto:
colClasses = c("Date", "character", "character")
col.names = c("Date", "File", "User")
df <- read.table(text = "",
colClasses = colClasses,
col.names = col.names)
Alternatívne môžete zadať col.names
ako reťazec:
df <- read.csv(text="Date,File,User", colClasses = colClasses)
Vďaka Richardovi Scrivenovi za zlepšenie