Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Create an empty data.frame

Tags:

dataframe

r

r-faq

I'm trying to initialize a data.frame without any rows. Basically, I want to specify the data types for each column and name them, but not have any rows created as a result.

The best I've been able to do so far is something like:

df <- data.frame(Date=as.Date("01/01/2000", format="%m/%d/%Y"),                   File="", User="", stringsAsFactors=FALSE) df <- df[-1,] 

Which creates a data.frame with a single row containing all of the data types and column names I wanted, but also creates a useless row which then needs to be removed.

Is there a better way to do this?

like image 859
Jeff Allen Avatar asked May 21 '12 16:05

Jeff Allen


People also ask

What is an empty DataFrame?

DataFrame.empty. True if NDFrame is entirely empty [no items], meaning any of the axes are of length 0.


2 Answers

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.

like image 186
digEmAll Avatar answered Sep 20 '22 03:09

digEmAll


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.

like image 25
toto_tico Avatar answered Sep 23 '22 03:09

toto_tico