I'estou tentando inicializar um data.frame sem nenhuma linha. Basicamente, eu quero especificar os tipos de dados para cada coluna e nomeá-los, mas não ter nenhuma linha criada como resultado.
O melhor I'tem sido capaz de fazer até agora é algo como:
df <- data.frame(Date=as.Date("01/01/2000", format="%m/%d/%Y"),
File="", User="", stringsAsFactors=FALSE)
df <- df[-1,]
Que cria um data.frame com uma única linha contendo todos os tipos de dados e nomes de colunas que eu queria, mas também cria uma linha inútil que depois precisa ser removida.
Há uma maneira melhor de fazer isto?
Inicializa-o com vectores vazios:
df <- data.frame(Date=as.Date(character()),
File=character(),
User=character(),
stringsAsFactors=FALSE)
Aqui's um outro exemplo com diferentes tipos de colunas :
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. :
Inicializar um data.frame
com uma coluna vazia do tipo errado não impede a adição de linhas com colunas de diferentes tipos.
Este método é apenas um pouco safer no sentido de que você'terá os tipos de colunas corretos desde o início, portanto se o seu código depende de alguma verificação de tipo de coluna, ele funcionará mesmo com um data.frame
com linhas zero.
Você poderia utilizar read.table
com uma string vazia para a entrada text
como a seguir:
colClasses = c("Date", "character", "character")
col.names = c("Date", "File", "User")
df <- read.table(text = "",
colClasses = colClasses,
col.names = col.names)
Alternativamente especificando os col.names
como uma string:
df <- read.csv(text="Date,File,User", colClasses = colClasses)
Graças a Richard Scriven pela melhoria