Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Inserting missing years to complete a data.frame

Tags:

dataframe

r

I'm creating a dataframe containing the number of incidents of a certain kind in each state in each year from 2000 to 2010 (pretend that they are gun incidents):

states <- c('Texas', 'Texas', 'Arizona', 'California', 'California')
incidents <- c(1, 1, 2, 1, 4)
years <- c(2000, 2008, 2004, 2002, 2007)

DF <- data.frame(states, incidents, years)

> DF
      states incidents years
1      Texas         1  2000
2      Texas         1  2008
3    Arizona         2  2004
4 California         1  2002
5 California         4  2007

I want to insert rows to complete the dataset, e.g. zeros for Texas for 2001, 2002, 2003, ... 2007, and for 2009 and 2010. And likewise, zeros for Arizona for all years except 2004. Same thing for California.

How can I do this?

like image 399
wwl Avatar asked Mar 22 '18 15:03

wwl


People also ask

How to indicate missing data in R?

In R, missing values are represented by the symbol NA (not available). Impossible values (e.g., dividing by zero) are represented by the symbol NaN (not a number). Unlike SAS, R uses the same symbol for character and numeric data.

How to exclude missing values in R?

Firstly, we use brackets with complete. cases() function to exclude missing values in R. Secondly, we omit missing values with na. omit() function.

How to indicate NA in R?

For testing objects that are NA use is.na() For testing objects that are NaN use is. nan()


1 Answers

You can use tidyr::complete to fill in missing years (2010:2010) and values with 0.

library(tidyr)
DFfilled <- DF %>%
    complete(states, years = 2000:2010, 
             fill = list(incidents = 0)) %>%
    as.data.frame()

PS:
If there are entries with year 2010 in your data (now it's only up to 2008) you can use full_seq(years, 1) instead of 2000:2010.

like image 82
pogibas Avatar answered Oct 07 '22 02:10

pogibas