R 对百分比覆盖率数据库使用完整函数

R using complete function for percent cover database

我正试图在百分比覆盖率数据库中填充隐式丢失的数据。对于每个 Site、Transect 和 Quadrat,我希望每个 Quadrat 包含整个数据库中的所有“标签”。因此,特定样方中缺少的任何标签都应包含在等于 0 的“percent_cover”变量中(参见所需输出)。

数据库

data <- structure(list(Site = c("HAN", "HAN", "HAN", "HAN", "HAN", "HAN", 
"HAN", "HAN", "HAN", "HAN", "HAN", "HAN", "HAN", "HAN", "HAN", 
"HAN", "HAN", "HAN", "HAN"), Transect = c(1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), Quadrat = c(1, 1, 1, 1, 
1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3), Label = c("Bare-Subst", 
"CCA", "PorComp", "PorLob", "Turf", "Urchins", "Bare-Subst", 
"CCA", "PocMea", "PorComp", "PorLob", "Turf", "Bare-Subst", "CCA", 
"MontiPat", "PocMea", "PorComp", "PorLob", "Turf"), percent_cover = c(0.15, 
0.07, 0.18, 0.42, 0.17, 0.01, 0.06, 0.04, 0.01, 0.09, 0.55, 0.25, 
0.05, 0.03, 0.01, 0.02, 0.24, 0.37, 0.28)), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -19L), spec = structure(list(
    cols = list(Name = structure(list(), class = c("collector_character", 
    "collector")), Date = structure(list(), class = c("collector_character", 
    "collector")), Site = structure(list(), class = c("collector_character", 
    "collector")), Transect = structure(list(), class = c("collector_double", 
    "collector")), Quadrat = structure(list(), class = c("collector_double", 
    "collector")), Aux4 = structure(list(), class = c("collector_logical", 
    "collector")), Aux5 = structure(list(), class = c("collector_logical", 
    "collector")), Row = structure(list(), class = c("collector_double", 
    "collector")), Column = structure(list(), class = c("collector_double", 
    "collector")), Label = structure(list(), class = c("collector_character", 
    "collector"))), default = structure(list(), class = c("collector_guess", 
    "collector")), skip = 1), class = "col_spec"), groups = structure(list(
    Site = c("HAN", "HAN", "HAN"), Transect = c(1, 1, 1), Quadrat = c(1, 
    2, 3), .rows = list(1:6, 7:12, 13:19)), row.names = c(NA, 
-3L), class = c("tbl_df", "tbl", "data.frame"), .drop = TRUE))

所需的数据库

data_desired <- structure(list(Site = c("HAN", "HAN", "HAN", "HAN", "HAN", "HAN", 
"HAN", "HAN", "HAN", "HAN", "HAN", "HAN", "HAN", "HAN", "HAN", 
"HAN", "HAN", "HAN", "HAN", "HAN", "HAN", "HAN", "HAN", "HAN"
), Transect = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1), Quadrat = c(1, 1, 1, 1, 1, 1, 1, 
1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 2), Label = c("Bare-Subst", 
"CCA", "MontiPat", "PocMea", "PorComp", "PorLob", "Turf", "Urchins", 
"Bare-Subst", "CCA", "MontiPat", "PocMea", "PorComp", "PorLob", 
"Turf", "Urchins", "Bare-Subst", "CCA", "MontiPat", "PocMea", 
"PorComp", "PorLob", "Turf", "Urchins"), percent_cover = c(0.15, 
0.07, 0, 0, 0.18, 0.42, 0.17, 0.01, 0.06, 0.04, 0, 0.01, 0.09, 
0.55, 0.25, 0, 0.05, 0.03, 0.01, 0.02, 0.24, 0.37, 0.28, 0)), class = c("spec_tbl_df", 
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -24L), spec = structure(list(
    cols = list(Site = structure(list(), class = c("collector_character", 
    "collector")), Transect = structure(list(), class = c("collector_double", 
    "collector")), Quadrat = structure(list(), class = c("collector_double", 
    "collector")), Label = structure(list(), class = c("collector_character", 
    "collector")), percent_cover = structure(list(), class = c("collector_double", 
    "collector"))), default = structure(list(), class = c("collector_guess", 
    "collector")), skip = 1), class = "col_spec"))

我尝试使用 complete() 函数来完成此操作。但是,这个函数写成returns输入数据库没有任何变化:

尝试的解决方案

data_new <- data %>% complete(Site, Transect, Quadrat, Label, fill = list(percent_cover = 0))

我想在这里更改我的代码,以使用完整函数或其他建议的函数(我更喜欢使用完整函数)获得所需的输出。预先感谢您的帮助。

complete 默认情况下尊重您的组,因此从技术上讲,每个组内的一切都 completed 很好。

取消分组,然后重试:

ungroup(data) %>%
  complete(Site, Transect, Quadrat, Label, fill = list(percent_cover = 0))
# # A tibble: 24 x 5
#    Site  Transect Quadrat Label      percent_cover
#    <chr>    <dbl>   <dbl> <chr>              <dbl>
#  1 HAN          1       1 Bare-Subst          0.15
#  2 HAN          1       1 CCA                 0.07
#  3 HAN          1       1 MontiPat            0   
#  4 HAN          1       1 PocMea              0   
#  5 HAN          1       1 PorComp             0.18
#  6 HAN          1       1 PorLob              0.42
#  7 HAN          1       1 Turf                0.17
#  8 HAN          1       1 Urchins             0.01
#  9 HAN          1       2 Bare-Subst          0.06
# 10 HAN          1       2 CCA                 0.04
# # ... with 14 more rows