簡體   English   中英

如何匯總跨列(包括計算列)的均值?

[英]How do I summarize means across columns, including a calculated column?

我將如何使用dplyr summarize功能,以便在所有列計算平均值,而是包括從需要的原始數據自定義列的結果?

這是使用msleep數據集的示例。 我希望結果是顯示平均值的一行,以及我創建的sleep_tot_rem列的正確結果。

library(tidyverse)

# Incorrect calculation for Mutated Column
msleep %>% filter(!is.na(sleep_rem)) %>% mutate(sleep_tot_rem = sleep_total / sleep_rem) %>% 
  summarize_if(is.numeric, mean, na.rm=TRUE)
#> # A tibble: 1 x 7
#>   sleep_total sleep_rem sleep_cycle awake brainwt bodywt sleep_tot_rem
#>         <dbl>     <dbl>       <dbl> <dbl>   <dbl>  <dbl>         <dbl>
#> 1        10.4      1.88       0.440  13.6   0.106   63.3          6.97

# Correct calculation for mutated column
msleep %>% filter(!is.na(sleep_rem)) %>% summarize_if(is.numeric, sum, na.rm=TRUE) %>% 
  mutate(sleep_tot_rem = sleep_total / sleep_rem)
#> # A tibble: 1 x 7
#>   sleep_total sleep_rem sleep_cycle awake brainwt bodywt sleep_tot_rem
#>         <dbl>     <dbl>       <dbl> <dbl>   <dbl>  <dbl>         <dbl>
#> 1        634.      114.        14.1  830.    5.11  3861.          5.54

提前致謝。

問題在於,第一個結果正確計算了總睡眠與睡眠睡眠的平均比率。 比率的平均值不太可能與平均值的比率相同。 您需要回答的問題是您想要的:平均比率或平均比率。

如果是前者,請使用第一個計算,因為您要取計算結果的平均值。 如果是后者,請使用第二次計算,因為您要基於平均睡眠時間來計算結果。 只要兩個度量具有相同的條目數,則總和的比率等於均值的比率(總和只是平均值乘以值的數目,即一個在頂部和底部抵消的常數)。

我們可以在一個簡化的示例中看到這一點。 如果我們創建兩個變量ab

a <- 1:10
b <- 11:20

我們可以看到a:b的平均比例為:

mean(a / b)

0.3312286,而平均比率為:

mean(a) / mean(b)

0.3548387。

這與權重的差異有關。 比率的平均值對所有10個值的權重相同,但是平均值的比率受任何異常值的影響更大。 如果使用更極端的示例,則更明顯:

x <- c(1:9, 100)
y <- c(2*(1:9), 500)

mean(x / y)
mean(x) / mean(y)

在這里,平均比率為0.47,因為100/500 = 0.2影響相對較小。 但是,平均值之比為0.2458,因為100和500對平均值的影響比其他9個值大得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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