gpt4 book ai didi

r - Dplyr 在没有所有数据的情况下计算均值和方差

转载 作者:行者123 更新时间:2023-12-04 12:45:14 24 4
gpt4 key购买 nike

我有一个数据集,开始时如下所示:

set.seed(50)
n <- 20
s_num <- c(10,20,30)
counts <- c(0,1,2,3,4)

strata <- sample(s_num, n, replace=T)
sites <- seq(1, n, by=1)
observed <- sample(counts, n, replace=T)

df <- as.data.frame(cbind(strata,sites,observed))

我可以按阶层分组并使用 dplyr 获得均值和方差:

library(dplyr)
df2 <- df %>%
group_by(strata) %>%
summarise(mcount = mean(observed),
varcount = var(observed))

问题是数据库中不再有 0 个计数:

df3 <- subset(df,observed != 0)

所以均值和方差现在不正确:

df4 <- df3 %>%
group_by(strata) %>%
summarise(mcount = mean(observed),
varcount = var(observed))

但我有网站的数量:

site_count <- df %>%
group_by(strata) %>%
summarise(count_plot = n_distinct(sites))

我仍然可以使用 dplyr 计算不带 0 的均值方差吗?通过将站点计数合并到 df,平均实际上并不太难;方差更难。如果需要,我可以添加回 0 行,但如果可能的话,我想看看是否有一种简单的解决方法。谢谢。

最佳答案

一旦您计算了 count_plot,您就可以根据公式手动计算均值和方差。

方差计算为 sum((x - mean(x))^2)/(length(x) - 1)

df3 %>% 
left_join(site_count) %>%
group_by(strata) %>%
summarise(N = unique(count_plot),
mcount = sum(observed)/N,
varcount = sum((observed - mcount)^2, (N - n())*mcount^2)/(N - 1)) %>%
select(-N)


# # A tibble: 3 x 3
# strata mcount varcount
# <dbl> <dbl> <dbl>
# 1 10.0 1.89 0.861
# 2 20.0 1.33 1.07
# 3 30.0 2.40 2.30

匹配 df2

df2

# A tibble: 3 x 3
strata mcount varcount
<dbl> <dbl> <dbl>
1 10.0 1.89 0.861
2 20.0 1.33 1.07
3 30.0 2.40 2.30

关于r - Dplyr 在没有所有数据的情况下计算均值和方差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50950684/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com