【发布时间】:2021-07-03 22:03:27
【问题描述】:
我得到了一个包含一个数值和一个 5 级因子变量的数据框。
# set seed for reproducibility
set.seed(123)
df <- tibble(group = rep(c("a", "b", "c", "d", "e"), each = 20),
values = c(rnorm(20, 0, 1), rnorm(20, 1, 1), rnorm(20, 2, 1),
rnorm(20, 3, 1), rnorm(20, 4, 1)))
我想用summary来得到分位数
df %>%
group_by(group) %>%
summarize(quantiles = quantile(values, c(0.25, 0.75)))
df %>%
group_by(group) %>%
summarize(quantile0.25 = quantile(values, c(0.25)),
quantile0.75 = quantile(values, c(0.75)))
其中之一。我不知道哪个更实用,每行获取分位数,两个变量或两行作为一个变量。
最后我想(最好在同一个管道中)使用分位数来过滤原始数据帧中的异常值,而不是汇总数据帧,在每个相应的组中,比如
df %>%
group_by() %>%
summarize() %>%
filter()
每组按各自的分位数+-1,5IQR 过滤。
这可能吗,最好的方法是什么? 我认为使用一个应用于所有组的过滤器值按组过滤会很简单,但是如何为每个组应用不同的过滤器值?
【问题讨论】:
-
我认为最好使用
group_by+mutate而不是summarize。然后你将使用第二种方法添加上下分位数的列,并参考filter中的那些。
标签: r filter dplyr outliers summarize