![](/img/trans.png)
[英]When making a calculated column, how do I sum across columns with dplyr?
[英]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
提前致謝。
問題在於,第一個結果是正確計算了總睡眠與睡眠睡眠的平均比率。 比率的平均值不太可能與平均值的比率相同。 您需要回答的問題是您想要的:平均比率或平均比率。
如果是前者,請使用第一個計算,因為您要取計算結果的平均值。 如果是后者,請使用第二次計算,因為您要基於平均睡眠時間來計算結果。 只要兩個度量具有相同的條目數,則總和的比率等於均值的比率(總和只是平均值乘以值的數目,即一個在頂部和底部抵消的常數)。
我們可以在一個簡化的示例中看到這一點。 如果我們創建兩個變量a
和b
:
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.