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
默认情况下尊重您的组,因此从技术上讲,每个组内的一切都 complete
d 很好。
取消分组,然后重试:
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
我正试图在百分比覆盖率数据库中填充隐式丢失的数据。对于每个 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
默认情况下尊重您的组,因此从技术上讲,每个组内的一切都 complete
d 很好。
取消分组,然后重试:
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