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?
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.
Firstly, we use brackets with complete. cases() function to exclude missing values in R. Secondly, we omit missing values with na. omit() function.
For testing objects that are NA use is.na() For testing objects that are NaN use is. nan()
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
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With