如何重新计算 R 中具有不同数量观察值的个体值和平均值混合的平均值?

How can I recalculate the mean of a mixture of individual and mean values with varying numbers of observations in R?

我正在处理两组数据。第一个数据集是一组我从中进行测量的个体标本,另一个是一组在先前研究中针对给定物种种群报告的平均测量值。第一个数据集如下所示:

data.frame(Species = c('Species1', "Species1", 'Species1', 'Species2', 'Species3', 'Species3'),
           Specimen = c('A1', 'B2', 'C3', 'D4', 'E5', 'F6'),
           Measurement1 = c(100, 110, 120, 130, 140,150),
           Measurement2 = c(1, 2, 3, 4, 5, 6))

另一个看起来像这样:

data.frame(Species = c('Species1','Species1', 'Species2', 'Species3'),
                  N = c(10, 10, 11, 12),
                  Measurement1 = c(100, 100, 110, 120),
                  Measurement2 = c(1, 2, 3, 4))

我想做的是找到一种有效的方法来重新计算给定物种的平均值,给定该物种的所有观测值。对于上面给出的示例,结果将如下所示:

data.frame(Species=c('Species1','Species2','Species3'),
                  N=c(23,12,14),
                  Measurement1=c(101.3043,111.67,123.5714),
                  Measurement2=c(1.565,3,4.214))

我知道 aggregate() 会计算给定数据框的平均值,但我不知道有什么简单的方法可以重新计算几个求和平均值的平均值,或者如果条目数量不同。我知道可以使用公式

手动重新计算均值

(Xx*Nx)+(Xy*Ny)+(Xc*Nc) /(Nx+Ny+Nc)

但我不知道如何在 R 中以这样一种方式编写它,以便它可以通过分组因子指定的不同数量的条目来完成。

您可以合并两个数据集,然后取加权平均值:

library(dplyr)

data1 %>%
  mutate(N = 1) %>%
  select(-Specimen) %>%
  bind_rows(data2) %>%
  group_by(Species) %>%
  summarise(across(starts_with('Measurement'), weighted.mean, N), 
            N = sum(N))

#  Species  Measurement1 Measurement2     N
#  <chr>           <dbl>        <dbl> <dbl>
#1 Species1         101.         1.57    23
#2 Species2         112.         3.08    12
#3 Species3         124.         4.21    14