我目前正在处理一个关于特定地点树种密度(每公顷树木数,TPH)的数据集。为了计算所有地点的平均密度,我需要包括在给定地点不存在但在其他地点存在的树种的零值。下面是模拟类似于我的数据框的代码。
# Define number of rows and levels for the grouping variable
set.seed(120)
n_rows <- 10
site_levels <- c("A", "B", "C", "D")
# Create a map of sites and species that can be absent
absent_species <- list(
North = c("Quercus alba", "Betula papyrifera"),
South = c("Pinus strobus", "Tsuga canadensis"),
East = c("Acer rubrum"),
West = c("Quercus alba", "Tsuga canadensis")
)
# Define species pool and pre-fill empty site vectors
species_pool <- c("Acer rubrum", "Quercus alba", "Pinus strobus", "Tsuga canadensis", "Betula papyrifera")
site_species <- lapply(site_levels, function(site) character(0))
# Simulate Site column
data <- data.frame(Site = sample(site_levels, size = n_rows, replace = TRUE))
# Loop through rows and assign unique species per site
for (i in 1:n_rows) {
site <- data$Site[i]
absent_list <- absent_species[[site]]
species_pool_filtered <- setdiff(species_pool, absent_list)
# Check if all species have been used at this site
if (length(site_species[[site]]) == length(species_pool_filtered)) {
# No more species available, skip this row
next
}
# Choose a random species from the filtered pool
species <- sample(species_pool_filtered, size = 1, replace = FALSE)
# Assign species and add it to the site's list
data$Species[i] <- species
site_species[[site]] <- c(site_species[[site]], species)
}
# Simulate tree densities with some variation by site
data$TPH <- rnorm(n_rows,
mean = c(500, 250, 100, 350)[match(data$Site, site_levels)],
sd = c(100, 50, 25, 75)[match(data$Site, site_levels)])
# Print the simulated dataframe
print(data)
字符串
您会注意到并非所有树种都出现在每个样地中,这通常可以忽略,但它们不存在的事实很重要,因此它们应该作为TPH值为0的新观测值添加。是否有一种简单的方法可以添加给定站点中不存在但在其他站点中存在的物种,并将新观测值分配为TPH值0?
我曾尝试手动计算密度的平均值和标准误差,并简单地将所有密度的总和除以存在的站点数,以说明在不存在物种的站点处物种的零值。我能够以这种方式计算正确的平均值,但无法计算标准误差。
2条答案
按热度按时间mspsb9vt1#
一种可能的方法是使用
dplyr::right_join
。首先,定义一个包含所有可能的站点和物种组合的框架:字符串
然后使用
right_join
在目标框架中创建所有缺失的组合,以dplyr::mutate
和tidyr::replace_na
结尾,将NA
替换为0:型
jtw3ybtb2#
这可能是从
tidyr
使用complete
的好机会。在这里,您可以指定您想要的
Site
和Species
的所有组合,然后使用fill
将TPH
设置为0,以表示缺少的组合。字符串
输出
型