我有两组正在处理的数据。第一个数据集是我从中进行测量的一组个体样本,另一个是之前研究中对给定种群的一组平均测量值。第一个数据集如下:
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(+/(Nx+Ny+Rc(
但我不知道如何用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