r - Create an empty data.frame

ID : 3931

viewed : 173

Tags : rdataframer-faqr





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

vote vote

95

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

88

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

75

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

62

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

56

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?