r - Create an empty data.frame

ID : 3931

viewed : 121

Tags : rdataframer-faqr

Top 5 Answer for r - Create an empty data.frame

vote vote

98

Just initialize it with empty vectors:

df <- data.frame(Date=as.Date(character()),                  File=character(),                   User=character(),                   stringsAsFactors=FALSE)  

Here's an other example with different column types :

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. :

Initializing a data.frame with an empty column of the wrong type does not prevent further additions of rows having columns of different types.
This method is just a bit safer in the sense that you'll have the correct column types from the beginning, hence if your code relies on some column type checking, it will work even with a data.frame with zero rows.

vote vote

81

If you already have an existent data frame, let's say df that has the columns you want, then you can just create an empty data frame by removing all the rows:

empty_df = df[FALSE,] 

Notice that df still contains the data, but empty_df doesn't.

I found this question looking for how to create a new instance with empty rows, so I think it might be helpful for some people.

vote vote

70

You can do it without specifying column types

df = data.frame(matrix(vector(), 0, 3,                 dimnames=list(c(), c("Date", "File", "User"))),                 stringsAsFactors=F) 
vote vote

66

You could use read.table with an empty string for the input text as follows:

colClasses = c("Date", "character", "character") col.names = c("Date", "File", "User")  df <- read.table(text = "",                  colClasses = colClasses,                  col.names = col.names) 

Alternatively specifying the col.names as a string:

df <- read.csv(text="Date,File,User", colClasses = colClasses) 

Thanks to Richard Scriven for the improvement

vote vote

59

Just declare

table = data.frame() 

when you try to rbind the first line it will create the columns

Top 3 video Explaining r - Create an empty data.frame

Related QUESTION?