我的数据有一个分组变量group
,我想找到x
的组均值的中位数,这样我就可以标记组均值x
高于组均值中位数x
的组。
如果我将组平均值保存为一个tibble temp
,将x_mean
与median(x_mean)
进行比较,然后合并回temp
,则此计算很容易。
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年7月29日创建
2条答案
按热度按时间j7dteeu81#
只需使用
unique
:dfty9e192#
M-M的答案适用于特定的情况,但我认为如果一个以上的组具有相同的平均分数,那么它就不准确了。