在不破坏管道工作流(或加入临时小标题)的情况下获取组的中位数
Get median of group means without breaking piped workflow (or joining back temporary tibble)
我的数据有一个分组变量 group
,我想找到组均值 x
的中位数,以便我可以标记组均值 x
的组] 高于 x
.
的中位数组平均值
如果我将组均值保存为小标题 temp
,将 x_mean
与 median(x_mean)
进行比较,然后合并回 temp
.[=23=,则此计算很容易]
library(tidyverse)
set.seed(2001)
tb <- tibble(group = c(1, 2, rep(3, 3))) %>%
mutate(x = runif(n()) + ifelse(group %in% 1:2, 1, 0))
tb
#> # A tibble: 5 x 2
#> group x
#> <dbl> <dbl>
#> 1 1 1.76
#> 2 2 1.61
#> 3 3 0.218
#> 4 3 0.229
#> 5 3 0.153
temp <- tb %>%
group_by(group) %>%
summarize(x_mean = mean(x)) %>%
ungroup() %>%
mutate(x_hi = (x_mean > median(x_mean)))
temp
#> # A tibble: 3 x 3
#> group x_mean x_hi
#> <dbl> <dbl> <lgl>
#> 1 1 1.76 TRUE
#> 2 2 1.61 FALSE
#> 3 3 0.200 FALSE
tb <- inner_join(tb, temp)
#> Joining, by = "group"
这是所需的输出。 4/5 的观察值低于中位数似乎很奇怪,但这是可能的,因为我的组计数不相等。
tb
#> # A tibble: 5 x 4
#> group x x_mean x_hi
#> <dbl> <dbl> <dbl> <lgl>
#> 1 1 1.76 1.76 TRUE
#> 2 2 1.61 1.61 FALSE
#> 3 3 0.218 0.200 FALSE
#> 4 3 0.229 0.200 FALSE
#> 5 3 0.153 0.200 FALSE
我想在不破坏管道工作流程的情况下执行此操作。以下尝试失败,因为我的组有不同的计数。
tb <- tb %>%
group_by(group) %>%
mutate(x_mean2 = mean(x)) %>%
ungroup() %>%
mutate(x_hi2 = (x_mean > median(x_mean)))
tb
#> # A tibble: 5 x 6
#> group x x_mean x_hi x_mean2 x_hi2
#> <dbl> <dbl> <dbl> <lgl> <dbl> <lgl>
#> 1 1 1.76 1.76 TRUE 1.76 TRUE
#> 2 2 1.61 1.61 FALSE 1.61 TRUE
#> 3 3 0.218 0.200 FALSE 0.200 FALSE
#> 4 3 0.229 0.200 FALSE 0.200 FALSE
#> 5 3 0.153 0.200 FALSE 0.200 FALSE
有没有办法在不破坏我的管道工作流程的情况下获取 x
组平均值的中位数?
由 reprex package (v0.3.0)
于 2019-07-29 创建
只需使用unique
:
library(dplyr)
tb %>%
group_by(group) %>%
mutate(x_mean = mean(x)) %>%
ungroup %>%
mutate(x_hi = x_mean > median(unique(x_mean)))
#> # A tibble: 5 x 4
#> group x x_mean x_hi
#> <dbl> <dbl> <dbl> <lgl>
#> 1 1 1.76 1.76 TRUE
#> 2 2 1.61 1.61 FALSE
#> 3 3 0.218 0.200 FALSE
#> 4 3 0.229 0.200 FALSE
#> 5 3 0.153 0.200 FALSE
M-M 的答案适用于特定情况,但我认为如果不止一组具有相同的平均分数,则该答案不准确。
tb %>%
group_by(group) %>%
mutate(x_mean = mean(x)) %>%
ungroup %>%
nest(-x_mean, -group) %>%
mutate(x_median = median(x_mean)) %>%
unnest %>%
mutate(x_hi = x_mean > x_median)
我的数据有一个分组变量 group
,我想找到组均值 x
的中位数,以便我可以标记组均值 x
的组] 高于 x
.
如果我将组均值保存为小标题 temp
,将 x_mean
与 median(x_mean)
进行比较,然后合并回 temp
.[=23=,则此计算很容易]
library(tidyverse)
set.seed(2001)
tb <- tibble(group = c(1, 2, rep(3, 3))) %>%
mutate(x = runif(n()) + ifelse(group %in% 1:2, 1, 0))
tb
#> # A tibble: 5 x 2
#> group x
#> <dbl> <dbl>
#> 1 1 1.76
#> 2 2 1.61
#> 3 3 0.218
#> 4 3 0.229
#> 5 3 0.153
temp <- tb %>%
group_by(group) %>%
summarize(x_mean = mean(x)) %>%
ungroup() %>%
mutate(x_hi = (x_mean > median(x_mean)))
temp
#> # A tibble: 3 x 3
#> group x_mean x_hi
#> <dbl> <dbl> <lgl>
#> 1 1 1.76 TRUE
#> 2 2 1.61 FALSE
#> 3 3 0.200 FALSE
tb <- inner_join(tb, temp)
#> Joining, by = "group"
这是所需的输出。 4/5 的观察值低于中位数似乎很奇怪,但这是可能的,因为我的组计数不相等。
tb
#> # A tibble: 5 x 4
#> group x x_mean x_hi
#> <dbl> <dbl> <dbl> <lgl>
#> 1 1 1.76 1.76 TRUE
#> 2 2 1.61 1.61 FALSE
#> 3 3 0.218 0.200 FALSE
#> 4 3 0.229 0.200 FALSE
#> 5 3 0.153 0.200 FALSE
我想在不破坏管道工作流程的情况下执行此操作。以下尝试失败,因为我的组有不同的计数。
tb <- tb %>%
group_by(group) %>%
mutate(x_mean2 = mean(x)) %>%
ungroup() %>%
mutate(x_hi2 = (x_mean > median(x_mean)))
tb
#> # A tibble: 5 x 6
#> group x x_mean x_hi x_mean2 x_hi2
#> <dbl> <dbl> <dbl> <lgl> <dbl> <lgl>
#> 1 1 1.76 1.76 TRUE 1.76 TRUE
#> 2 2 1.61 1.61 FALSE 1.61 TRUE
#> 3 3 0.218 0.200 FALSE 0.200 FALSE
#> 4 3 0.229 0.200 FALSE 0.200 FALSE
#> 5 3 0.153 0.200 FALSE 0.200 FALSE
有没有办法在不破坏我的管道工作流程的情况下获取 x
组平均值的中位数?
由 reprex package (v0.3.0)
于 2019-07-29 创建只需使用unique
:
library(dplyr)
tb %>%
group_by(group) %>%
mutate(x_mean = mean(x)) %>%
ungroup %>%
mutate(x_hi = x_mean > median(unique(x_mean)))
#> # A tibble: 5 x 4
#> group x x_mean x_hi
#> <dbl> <dbl> <dbl> <lgl>
#> 1 1 1.76 1.76 TRUE
#> 2 2 1.61 1.61 FALSE
#> 3 3 0.218 0.200 FALSE
#> 4 3 0.229 0.200 FALSE
#> 5 3 0.153 0.200 FALSE
M-M 的答案适用于特定情况,但我认为如果不止一组具有相同的平均分数,则该答案不准确。
tb %>%
group_by(group) %>%
mutate(x_mean = mean(x)) %>%
ungroup %>%
nest(-x_mean, -group) %>%
mutate(x_median = median(x_mean)) %>%
unnest %>%
mutate(x_hi = x_mean > x_median)