根据R中的各种变量类计算加权平均值
Calculating weighted average according to various variable classes in R
我有不同物种的尺寸数据。
每个样本代表 1 m^2 的珊瑚礁图(样方;"Unique")。在任何给定的年份 ("YrSi"),每个地点都应该有 5 个样方,并且一个样方中的物种数量是任意的(有些物种比其他物种多,而且它们通常不同)。
我需要根据每个 "YrSi"(年站点组合)和 "Taxa"(即物种)。
示例:
head(df)
Unique Yr Si Qd YrSi Taxa Count Size SLength
6 2007-M1-1991 2007 M1 1991 2007 - M1 Carpophyllum flexuosum 7 10
7 2007-M1-1991 2007 M1 1991 2007 - M1 Carpophyllum flexuosum 1 15
8 2007-M1-1991 2007 M1 1991 2007 - M1 Carpophyllum flexuosum 5 20
9 2007-M1-1991 2007 M1 1991 2007 - M1 Carpophyllum flexuosum 4 25
10 2007-M1-1991 2007 M1 1991 2007 - M1 Carpophyllum flexuosum 4 30
11 2007-M1-1991 2007 M1 1991 2007 - M1 Carpophyllum flexuosum 1 35
我尝试使用 ddply
中嵌入的 weighted.mean。但计算错误,我得到了所有 YrSi 中所有物种的相同值。我怀疑它对所有物种和样本应用了 weighted.mean 计算。
wt_mean.df = ddply(df, c("YrSi","Taxa"),
function(x) weighted.mean(df$Size, df$Count))
head(wt_mean.df)
YrSi Taxa V1
1 2007 - C1 Buccinulum lineum 21.22346
2 2007 - C1 Cantharidus purpureus 21.22346
3 2007 - C1 Carpophyllum maschalocarpum 21.22346
4 2007 - C1 Cominella virgata 21.22346
5 2007 - C1 Cookia sulcata 21.22346
6 2007 - C1 Ecklonia radiata 21.22346
head(wt_mean.df)
YrSi Taxa V1
1 2007 - C1 Buccinulum lineum 21.22346
2 2007 - C1 Cantharidus purpureus 21.22346
3 2007 - C1 Carpophyllum maschalocarpum 21.22346
4 2007 - C1 Cominella virgata 21.22346
5 2007 - C1 Cookia sulcata 21.22346
6 2007 - C1 Ecklonia radiata 21.22346
计算错误,我得到了所有 YrSi 中所有物种的相同值。我怀疑它对所有物种和样本应用了 weighted.mean
计算。
tail(wt_mean.df)
YrSi Taxa V1
1603 2019 - T5 Maoricolpus roseus 21.22346
1604 2019 - T5 Patiriella regularis 21.22346
1605 2019 - T5 Sargassum scabridum 21.22346
1606 2019 - T5 Sargassum sinclairii 21.22346
1607 2019 - T5 Trochus viridus 21.22346
1608 2019 - T5 Zonaria turneriana 21.22346
我做错了什么?为什么我在 V1 中得不到正确的加权平均值?
另外,最好也获得加权 sd,但我还没有研究过。
请帮忙
Dplyr 可能是您的简单解决方案。
library(dplyr)
output <- df%>%
group_by(Yr, Si, Taxa) %>%
summarise(wMean = weighted.mean(Size, Count))
我有不同物种的尺寸数据。 每个样本代表 1 m^2 的珊瑚礁图(样方;"Unique")。在任何给定的年份 ("YrSi"),每个地点都应该有 5 个样方,并且一个样方中的物种数量是任意的(有些物种比其他物种多,而且它们通常不同)。 我需要根据每个 "YrSi"(年站点组合)和 "Taxa"(即物种)。 示例:
head(df)
Unique Yr Si Qd YrSi Taxa Count Size SLength
6 2007-M1-1991 2007 M1 1991 2007 - M1 Carpophyllum flexuosum 7 10
7 2007-M1-1991 2007 M1 1991 2007 - M1 Carpophyllum flexuosum 1 15
8 2007-M1-1991 2007 M1 1991 2007 - M1 Carpophyllum flexuosum 5 20
9 2007-M1-1991 2007 M1 1991 2007 - M1 Carpophyllum flexuosum 4 25
10 2007-M1-1991 2007 M1 1991 2007 - M1 Carpophyllum flexuosum 4 30
11 2007-M1-1991 2007 M1 1991 2007 - M1 Carpophyllum flexuosum 1 35
我尝试使用 ddply
中嵌入的 weighted.mean。但计算错误,我得到了所有 YrSi 中所有物种的相同值。我怀疑它对所有物种和样本应用了 weighted.mean 计算。
wt_mean.df = ddply(df, c("YrSi","Taxa"),
function(x) weighted.mean(df$Size, df$Count))
head(wt_mean.df)
YrSi Taxa V1
1 2007 - C1 Buccinulum lineum 21.22346
2 2007 - C1 Cantharidus purpureus 21.22346
3 2007 - C1 Carpophyllum maschalocarpum 21.22346
4 2007 - C1 Cominella virgata 21.22346
5 2007 - C1 Cookia sulcata 21.22346
6 2007 - C1 Ecklonia radiata 21.22346
head(wt_mean.df)
YrSi Taxa V1
1 2007 - C1 Buccinulum lineum 21.22346
2 2007 - C1 Cantharidus purpureus 21.22346
3 2007 - C1 Carpophyllum maschalocarpum 21.22346
4 2007 - C1 Cominella virgata 21.22346
5 2007 - C1 Cookia sulcata 21.22346
6 2007 - C1 Ecklonia radiata 21.22346
计算错误,我得到了所有 YrSi 中所有物种的相同值。我怀疑它对所有物种和样本应用了 weighted.mean
计算。
tail(wt_mean.df)
YrSi Taxa V1
1603 2019 - T5 Maoricolpus roseus 21.22346
1604 2019 - T5 Patiriella regularis 21.22346
1605 2019 - T5 Sargassum scabridum 21.22346
1606 2019 - T5 Sargassum sinclairii 21.22346
1607 2019 - T5 Trochus viridus 21.22346
1608 2019 - T5 Zonaria turneriana 21.22346
我做错了什么?为什么我在 V1 中得不到正确的加权平均值? 另外,最好也获得加权 sd,但我还没有研究过。 请帮忙
Dplyr 可能是您的简单解决方案。
library(dplyr)
output <- df%>%
group_by(Yr, Si, Taxa) %>%
summarise(wMean = weighted.mean(Size, Count))