![](/img/trans.png)
[英]Calculate a series of weighted means in R for groups with different weightings
[英]Calculate weighted means for multiple grouping with different weightings in R
我在SO上瀏覽了很多文章,試圖使我的代碼正常工作,但仍然有一些錯誤。 我正在嘗試根據不同的分組為許多列計算加權平均值。 具體來說,我想計算值列對特征(在這種情況下為wingL,wingW等)的加權平均值。
這是一個示例數據集(因為我的矩陣很大)和一些代碼:
>df
year site Species value wingL wingW proL proW
2018 2 Aa 3.0 310.6 54.9 NA 1.1
2017 2 Aa 1.0 310.6 54.9 NA 1.1
2018 2 Bb 7.5 NA 20 3 1.0
2017 2 Bb 5 NA 20 3 1.0
2018 4 Aa 8 310.6 54.9 NA 1.1
2017 4 Aa 6 310.6 54.9 NA 1.1
2018 4 Cc 1 161.20 143.8 NA NA
2017 4 Cc 1 161.20 143.8 NA NA
2018 6 Aa 12 310.6 54.9 NA 1.1
2018 6 Aa 9.5 310.6 54.9 NA 1.1
2018 6 Cc 7 161.20 143.8 NA NA
2017 6 Cc 7 161.20 143.8 NA NA
這是我的代碼:
dfnew <- setDT(df)[, lapply(.SD, function(x) weighted.mean(x, value)),
by = c("year", "Species"), .SDcols = wingL:proW]
但是它所做的一切都會刪除“值”列,這是我想用作權重的列。 基本上,我想為wingL:proW列計算各行的加權平均值。 然后,一旦有了這些數據,我最終將對每個站點的所有物種(Aa,Bb)進行平均。
使用下面的代碼,我能夠僅用一個新列(對於wingL_wm)正確地創建一個新的df,但無法弄清楚如何為我擁有的許多列進行縮放:
dfnew <- df %>%
group_by(year, site) %>%
summarise(wingL_wm = weighted.mean(wingL, value))
希望有道理。 感謝您的幫助這是一個通用的期望輸出,盡管“ x”應該是計算得出的加權平均值:
year site wingL_WM wingW_WM proL_WM proW_WM
2018 2 x x x x
2017 2 x x x x
2018 4 x x x x
2017 4 x x x x
2018 6 x x x x
2017 6 x x x x
dfnew <- setDT(df)[, lapply(.SD, function(x) weighted.mean(x, value, na.rm = TRUE)), by = c("year", "site"), .SDcols = wingL:proW]
我必須包含na.rm語句! 我認為這給出了正確的結果。 謝謝大家的幫助,因為我在分組時確實犯了錯誤,這讓我無法自拔。
它確實替代了原始值,但我可以接受。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.