Reputation: 337
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
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
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