Eric Dilley
Eric Dilley

Reputation: 337

R why is complete function only working for part of the dataframe?

I am attempting to complete implicit missing values in a dataframe that describes the percent cover of 3 different algal categories for all 3 sides (N, S, and T) for all 12 modules at two sites (WAI and HAN). Some of the cover data is missing because the "Label" (T, MA, CCA) In particular, I am having issues with populating the implicit missing values for "CCA" in the "Label" column for the "WAI" Site.

I believe the reason I am having this issue is because "CCA" is missing for most of the Sides and Modules at the WAI site. However, I am not sure how to address it.

The ultimate goal here is for each Date, Site, Module, and Side combination to have all three categories (T, MA, CCA) represented. If any of these three categories are missing, I want n = 0 and percent_cover = 0. That way, all implicitly missing values are made explicit.

As mentioned previously, I used the complete function in dplyr to populate implicitly missing "Label" categories (T, MA, CCA). However all Date, Site, Module, and Side combinations do not include all three Labels, particularly for the WAI site.

MA_cover_final <- structure(list(Date = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 7L, 7L, 7L, 7L, 7L, 7L, 
7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 
7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 8L, 8L, 8L, 8L, 8L, 
8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 
8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 
8L, 8L), .Label = c("4/11/17", "4/23/17", "6/12/18", "6/7/18", 
"8/26/17", "8/28/18", "9/1/18", "9/5/17"), class = "factor"), 
    Site = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L), .Label = c("HAN", "WAI"), class = "factor"), Module = c(7L, 
    7L, 7L, 7L, 7L, 7L, 7L, 7L, 8L, 8L, 8L, 8L, 8L, 8L, 9L, 9L, 
    9L, 9L, 9L, 9L, 9L, 9L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 
    11L, 11L, 11L, 11L, 11L, 11L, 12L, 12L, 12L, 12L, 12L, 12L, 
    1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 
    4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 
    6L, 6L, 6L, 7L, 7L, 8L, 8L, 8L, 8L, 8L, 8L, 9L, 9L, 9L, 9L, 
    9L, 9L, 9L, 10L, 10L, 10L, 10L, 10L, 11L, 11L, 11L, 11L, 
    11L, 11L, 11L, 12L, 12L, 12L, 12L, 12L, 1L, 1L, 1L, 1L, 1L, 
    2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 
    4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 1L, 
    1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 
    3L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 
    6L, 6L, 6L, 7L, 7L, 7L, 7L, 8L, 8L, 8L, 8L, 9L, 9L, 9L, 9L, 
    9L, 9L, 9L, 9L, 10L, 10L, 10L, 10L, 10L, 11L, 11L, 11L, 11L, 
    11L, 11L, 11L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 1L, 1L, 
    1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 
    4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 
    6L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 8L, 8L, 8L, 8L, 8L, 8L, 
    9L, 9L, 9L, 9L, 9L, 9L, 9L, 10L, 10L, 10L, 10L, 10L, 11L, 
    11L, 11L, 11L, 11L, 11L, 11L, 11L, 12L, 12L, 12L, 12L, 12L
    ), Side = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 1L, 
    1L, 2L, 2L, 3L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 1L, 1L, 
    2L, 2L, 2L, 3L, 3L, 1L, 1L, 1L, 2L, 2L, 3L, 1L, 1L, 1L, 2L, 
    2L, 3L, 1L, 1L, 2L, 2L, 2L, 3L, 1L, 1L, 2L, 3L, 3L, 1L, 1L, 
    2L, 3L, 1L, 1L, 2L, 2L, 3L, 3L, 1L, 1L, 2L, 2L, 3L, 3L, 1L, 
    1L, 2L, 2L, 3L, 3L, 1L, 2L, 1L, 1L, 2L, 2L, 2L, 3L, 1L, 1L, 
    1L, 2L, 2L, 3L, 3L, 1L, 2L, 2L, 3L, 3L, 1L, 1L, 1L, 2L, 2L, 
    2L, 3L, 1L, 1L, 2L, 2L, 3L, 1L, 1L, 2L, 2L, 3L, 1L, 1L, 2L, 
    2L, 3L, 1L, 1L, 2L, 2L, 3L, 3L, 1L, 1L, 2L, 2L, 3L, 3L, 1L, 
    1L, 2L, 2L, 3L, 3L, 1L, 1L, 2L, 2L, 3L, 3L, 1L, 1L, 2L, 2L, 
    3L, 3L, 1L, 1L, 2L, 2L, 3L, 3L, 1L, 1L, 2L, 2L, 3L, 1L, 1L, 
    2L, 2L, 3L, 3L, 1L, 1L, 2L, 2L, 3L, 1L, 1L, 2L, 2L, 3L, 3L, 
    1L, 1L, 2L, 3L, 1L, 1L, 2L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 
    3L, 1L, 1L, 2L, 2L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 1L, 1L, 
    1L, 2L, 2L, 2L, 3L, 1L, 2L, 2L, 3L, 1L, 1L, 2L, 2L, 3L, 3L, 
    1L, 1L, 2L, 2L, 3L, 3L, 1L, 1L, 2L, 2L, 3L, 3L, 1L, 2L, 2L, 
    3L, 3L, 1L, 1L, 2L, 2L, 3L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 
    3L, 1L, 1L, 2L, 2L, 3L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 1L, 
    1L, 2L, 2L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 1L, 1L, 2L, 
    2L, 3L), .Label = c("N", "S", "T"), class = "factor"), nn = c(50L, 
    50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 
    50L, 49L, 49L, 49L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 49L, 
    49L, 49L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 
    50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 
    50L, 46L, 46L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 
    50L, 50L, 50L, 50L, 50L, 50L, 50L, 49L, 49L, 51L, 51L, 50L, 
    50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 
    50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 
    50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 
    50L, 50L, 50L, 50L, 47L, 47L, 50L, 51L, 51L, 50L, 50L, 50L, 
    50L, 41L, 41L, 48L, 48L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 
    50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 49L, 
    49L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 
    50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 
    50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 
    50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 
    50L, 49L, 50L, 50L, 50L, 50L, 50L, 50L, 49L, 50L, 50L, 50L, 
    50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 
    51L, 51L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 
    50L, 50L, 50L, 50L, 50L, 50L, 50L, 49L, 49L, 50L, 50L, 50L, 
    50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 
    50L, 50L, 50L, 49L, 49L, 49L, 50L, 50L, 50L, 50L, 50L, 50L, 
    50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 50L, 
    50L, 50L, 50L, 50L), Label = c("CCA", "MA", "T", "CCA", "MA", 
    "T", "CCA", "T", "MA", "T", "MA", "T", "MA", "T", "CCA", 
    "MA", "T", "CCA", "MA", "T", "MA", "T", "MA", "T", "CCA", 
    "MA", "T", "CCA", "T", "CCA", "MA", "T", "CCA", "T", "T", 
    "CCA", "MA", "T", "MA", "T", "T", "MA", "T", "CCA", "MA", 
    "T", "T", "MA", "T", "T", "MA", "T", "MA", "T", "T", "T", 
    "MA", "T", "MA", "T", "MA", "T", "MA", "T", "MA", "T", "MA", 
    "T", "MA", "T", "MA", "T", "MA", "T", "T", "T", "MA", "T", 
    "CCA", "MA", "T", "T", "CCA", "MA", "T", "MA", "T", "CCA", 
    "T", "T", "MA", "T", "MA", "T", "CCA", "MA", "T", "CCA", 
    "MA", "T", "T", "CCA", "T", "MA", "T", "T", "MA", "T", "MA", 
    "T", "T", "MA", "T", "MA", "T", "T", "MA", "T", "MA", "T", 
    "MA", "T", "MA", "T", "MA", "T", "MA", "T", "MA", "T", "MA", 
    "T", "MA", "T", "MA", "T", "MA", "T", "MA", "T", "MA", "T", 
    "MA", "T", "MA", "T", "MA", "T", "MA", "T", "MA", "T", "MA", 
    "T", "MA", "T", "T", "MA", "T", "MA", "T", "MA", "T", "MA", 
    "T", "MA", "T", "T", "MA", "T", "MA", "T", "MA", "T", "MA", 
    "T", "T", "T", "MA", "T", "T", "T", "CCA", "MA", "T", "CCA", 
    "MA", "T", "CCA", "T", "MA", "T", "MA", "T", "T", "CCA", 
    "MA", "T", "CCA", "MA", "T", "T", "CCA", "MA", "T", "CCA", 
    "MA", "T", "T", "T", "MA", "T", "T", "MA", "T", "MA", "T", 
    "MA", "T", "MA", "T", "MA", "T", "MA", "T", "MA", "T", "MA", 
    "T", "MA", "T", "T", "MA", "T", "MA", "T", "MA", "T", "MA", 
    "T", "MA", "T", "CCA", "MA", "T", "CCA", "MA", "T", "CCA", 
    "T", "MA", "T", "MA", "T", "MA", "T", "CCA", "MA", "T", "CCA", 
    "MA", "T", "T", "MA", "T", "MA", "T", "T", "CCA", "MA", "T", 
    "CCA", "MA", "T", "MA", "T", "MA", "T", "MA", "T", "T"), 
    n = c(1L, 5L, 34L, 3L, 2L, 39L, 1L, 6L, 5L, 37L, 4L, 38L, 
    3L, 9L, 1L, 3L, 26L, 2L, 6L, 28L, 1L, 9L, 3L, 29L, 1L, 6L, 
    34L, 1L, 7L, 3L, 1L, 28L, 1L, 16L, 5L, 1L, 6L, 39L, 5L, 37L, 
    4L, 1L, 48L, 1L, 2L, 42L, 39L, 3L, 43L, 45L, 1L, 37L, 3L, 
    39L, 38L, 47L, 5L, 34L, 2L, 40L, 6L, 40L, 6L, 42L, 3L, 46L, 
    1L, 45L, 4L, 40L, 3L, 42L, 3L, 39L, 46L, 48L, 3L, 31L, 1L, 
    1L, 36L, 10L, 2L, 1L, 43L, 1L, 42L, 1L, 1L, 36L, 1L, 33L, 
    1L, 9L, 1L, 1L, 45L, 3L, 5L, 36L, 6L, 1L, 41L, 1L, 40L, 7L, 
    3L, 43L, 3L, 41L, 34L, 4L, 45L, 2L, 44L, 29L, 8L, 39L, 6L, 
    40L, 2L, 34L, 8L, 31L, 2L, 40L, 1L, 35L, 3L, 46L, 5L, 42L, 
    1L, 41L, 2L, 43L, 3L, 44L, 1L, 35L, 3L, 44L, 7L, 43L, 1L, 
    48L, 7L, 38L, 2L, 40L, 3L, 40L, 6L, 37L, 9L, 38L, 44L, 1L, 
    39L, 4L, 27L, 4L, 44L, 5L, 42L, 9L, 38L, 48L, 5L, 36L, 8L, 
    33L, 3L, 38L, 1L, 47L, 50L, 12L, 2L, 31L, 33L, 30L, 1L, 3L, 
    40L, 3L, 1L, 38L, 1L, 21L, 3L, 32L, 1L, 29L, 29L, 2L, 3L, 
    38L, 2L, 3L, 36L, 15L, 1L, 1L, 35L, 1L, 3L, 35L, 24L, 44L, 
    2L, 46L, 42L, 4L, 42L, 3L, 44L, 3L, 24L, 2L, 45L, 3L, 40L, 
    3L, 46L, 2L, 42L, 6L, 42L, 1L, 41L, 46L, 5L, 41L, 1L, 42L, 
    5L, 41L, 4L, 36L, 3L, 31L, 2L, 5L, 34L, 4L, 4L, 23L, 1L, 
    3L, 13L, 28L, 7L, 40L, 4L, 28L, 1L, 1L, 43L, 3L, 2L, 41L, 
    16L, 4L, 34L, 3L, 31L, 5L, 1L, 4L, 25L, 4L, 4L, 28L, 1L, 
    3L, 2L, 46L, 3L, 41L, 4L), percent_cover = c(0.02, 0.1, 0.68, 
    0.06, 0.04, 0.78, 0.02, 0.12, 0.1, 0.74, 0.08, 0.76, 0.06, 
    0.18, 0.0204081632653061, 0.0612244897959184, 0.530612244897959, 
    0.04, 0.12, 0.56, 0.02, 0.18, 0.06, 0.58, 0.0204081632653061, 
    0.122448979591837, 0.693877551020408, 0.02, 0.14, 0.06, 0.02, 
    0.56, 0.02, 0.32, 0.1, 0.02, 0.12, 0.78, 0.1, 0.74, 0.08, 
    0.02, 0.96, 0.02, 0.04, 0.84, 0.78, 0.06, 0.86, 0.9, 0.0217391304347826, 
    0.804347826086957, 0.06, 0.78, 0.76, 0.94, 0.1, 0.68, 0.04, 
    0.8, 0.12, 0.8, 0.12, 0.84, 0.06, 0.92, 0.02, 0.9, 0.0816326530612245, 
    0.816326530612245, 0.0588235294117647, 0.823529411764706, 
    0.06, 0.78, 0.92, 0.96, 0.06, 0.62, 0.02, 0.02, 0.72, 0.2, 
    0.04, 0.02, 0.86, 0.02, 0.84, 0.02, 0.02, 0.72, 0.02, 0.66, 
    0.02, 0.18, 0.02, 0.02, 0.9, 0.06, 0.1, 0.72, 0.12, 0.02, 
    0.82, 0.02, 0.8, 0.14, 0.06, 0.86, 0.06, 0.82, 0.68, 0.08, 
    0.9, 0.0425531914893617, 0.936170212765957, 0.58, 0.156862745098039, 
    0.764705882352941, 0.12, 0.8, 0.04, 0.68, 0.195121951219512, 
    0.75609756097561, 0.0416666666666667, 0.833333333333333, 
    0.02, 0.7, 0.06, 0.92, 0.1, 0.84, 0.02, 0.82, 0.04, 0.86, 
    0.06, 0.88, 0.02, 0.7, 0.06, 0.88, 0.14, 0.86, 0.0204081632653061, 
    0.979591836734694, 0.14, 0.76, 0.04, 0.8, 0.06, 0.8, 0.12, 
    0.74, 0.18, 0.76, 0.88, 0.02, 0.78, 0.08, 0.54, 0.08, 0.88, 
    0.1, 0.84, 0.18, 0.76, 0.96, 0.1, 0.72, 0.16, 0.66, 0.06, 
    0.76, 0.02, 0.94, 1, 0.24, 0.04, 0.62, 0.66, 0.6, 0.02, 0.06, 
    0.8, 0.06, 0.02, 0.76, 0.02, 0.42, 0.06, 0.64, 0.02, 0.58, 
    0.591836734693878, 0.04, 0.06, 0.76, 0.04, 0.06, 0.72, 0.306122448979592, 
    0.02, 0.02, 0.7, 0.02, 0.06, 0.7, 0.48, 0.88, 0.04, 0.92, 
    0.84, 0.08, 0.84, 0.06, 0.88, 0.0588235294117647, 0.470588235294118, 
    0.04, 0.9, 0.06, 0.8, 0.06, 0.92, 0.04, 0.84, 0.12, 0.84, 
    0.02, 0.82, 0.92, 0.1, 0.82, 0.02, 0.84, 0.102040816326531, 
    0.836734693877551, 0.08, 0.72, 0.06, 0.62, 0.04, 0.1, 0.68, 
    0.08, 0.08, 0.46, 0.02, 0.06, 0.26, 0.56, 0.14, 0.8, 0.08, 
    0.56, 0.0204081632653061, 0.0204081632653061, 0.877551020408163, 
    0.06, 0.04, 0.82, 0.32, 0.08, 0.68, 0.06, 0.62, 0.1, 0.02, 
    0.08, 0.5, 0.08, 0.08, 0.56, 0.02, 0.06, 0.04, 0.92, 0.06, 
    0.82, 0.08)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-281L))

MA_cover_final <- MA_cover_final %>% group_by(Date, Site) %>% 
  complete(Side, Label, fill = list(n = 0, percent_cover = 0)) %>% 
  ungroup()

The resulting dataframe should have 432 rows [12 Modules (1-12) x 3 Sides (N, S, T) x 3 Labels ("T", "MA", "CCA") x 4 Dates]

Upvotes: 1

Views: 1161

Answers (2)

aosmith
aosmith

Reputation: 36076

If you want to use complete() on a grouped dataset, factor levels not present in the group don't get expanded. Instead we have to give the levels we want added to each of the groups. This comes up for Label in your dataset.

Also, I think you need to have Module be part of whatever approach you take.

It appears that Modules are nested in Sites and Sites are nested in Dates, so I don't think you want combinations of those filled in for the whole dataset. You can use those as your grouping variables, then use the two other variables Side and Label in complete(). Since the values are taken within group only, we need to define the values for Label. (Side happens to be OK for your example, but it would have been prudent to give the values for Side, as well.)

test <- MA_cover_final %>% 
    group_by(Site, Date, Module) %>% 
    complete(Side, Label = unique(test$Label), fill = list(n = 0, percent_cover = 0)) %>% 
    ungroup()

str(test)

Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   432 obs. of  8 variables:
 $ Date         : Factor w/ 8 levels "4/11/17","4/23/17",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ Site         : Factor w/ 2 levels "HAN","WAI": 1 1 1 1 1 1 1 1 1 1 ...
 $ Module       : int  7 7 7 7 7 7 7 7 7 8 ...
 $ Side         : Factor w/ 3 levels "N","S","T": 1 1 1 2 2 2 3 3 3 1 ...
 $ Label        : chr  "CCA" "MA" "T" "CCA" ...
 $ nn           : int  50 50 50 50 50 50 50 NA 50 NA ...
 $ n            : num  1 5 34 3 2 39 1 0 6 0 ...
 $ percent_cover: num  0.02 0.1 0.68 0.06 0.04 0.78 0.02 0 0.12 0 ...

You can do this all without grouping if you get the right combo of nesting and crossing. Something like the following may be what you are after. This keeps only the within group combinations of the nested variables but fills in missing Side and Label values:

    test2 <- MA_cover_final %>% 
        complete(nesting(Site, Date, Module), Side, Label, fill = list(n = 0, percent_cover = 0))

str(test)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   432 obs. of  8 variables:
 $ Site         : Factor w/ 2 levels "HAN","WAI": 1 1 1 1 1 1 1 1 1 1 ...
 $ Date         : Factor w/ 8 levels "4/11/17","4/23/17",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ Module       : int  7 7 7 7 7 7 7 7 7 8 ...
 $ Side         : Factor w/ 3 levels "N","S","T": 1 1 1 2 2 2 3 3 3 1 ...
 $ Label        : chr  "CCA" "MA" "T" "CCA" ...
 $ nn           : int  50 50 50 50 50 50 50 NA 50 NA ...
 $ n            : num  1 5 34 3 2 39 1 0 6 0 ...
 $ percent_cover: num  0.02 0.1 0.68 0.06 0.04 0.78 0.02 0 0.12 0 ...

identical(test, test2)
[1] TRUE

Upvotes: 0

Mako212
Mako212

Reputation: 7292

I think I've figured out what you're looking for, but you'll have to confirm:

We want to complete every factor column, with the exception being Date which is discrete between Site so, we'll wrap it in nesting() to only use the combinations of Site and Date that exist in the data.

final <- MA_cover_final %>% group_by(Site) %>% 
  complete(Label, Side, Module, nesting(Date), fill = list(n= 0, percent_cover =0))


# A tibble: 432 x 8
# Groups:   Site [2]
   Site  Label Side  Module Date       nn     n percent_cover
   <fct> <chr> <fct>  <int> <fct>   <int> <dbl>         <dbl>
 1 HAN   CCA   N          7 4/11/17    50     1        0.02  
 2 HAN   CCA   N          7 6/12/18    NA     0        0     
 3 HAN   CCA   N          7 8/28/18    NA     0        0     
 4 HAN   CCA   N          7 9/5/17     50     2        0.04  
 5 HAN   CCA   N          8 4/11/17    NA     0        0     
 6 HAN   CCA   N          8 6/12/18    NA     0        0     
 7 HAN   CCA   N          8 8/28/18    NA     0        0     
 8 HAN   CCA   N          8 9/5/17     NA     0        0     
 9 HAN   CCA   N          9 4/11/17    49     1        0.0204
10 HAN   CCA   N          9 6/12/18    50     2        0.04  
# ... with 422 more rows

Upvotes: 2

Related Questions