簡體   English   中英

計算R中具有不同權重的多個分組的加權均值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM