R:保持数据框中组的值低于 99 分位数

标签 r select quantile

我有一个包含组和值的数据框。首先,我计算每组 99% 的分位数。现在,我想为每个组删除高于 99% 分位数的值。

df<-data.frame(group = rep(c("A", "B"), each = 4),
               value = c(c(6,5,80,4,60)*10,3,5,4))

# data
  group value
1     A    60
2     A    50
3     A   800
4     A    40
5     B   600
6     B     3
7     B     5
8     B     4

计算各个组的分位数

quant<-aggregate(df$value, by = list(df$group), FUN = quantile, probs  = 0.99)

> quant
  Group.1      x
1       A 777.80
2       B 582.15

我尝试应用分位数向量来选择较低的值。但是,它错过了组规范..

df[df$value < quant$x,]

预期结果:

  group value
1     A    60
2     A    50
4     A    40
5     B     3
6     B     5
7     B     4

如何应用分位数向量以在数据框中按组仅保留低于 99% 的值?

最佳答案

我们可以在分组之后做一个filter

library(dplyr)
df %>%
   group_by(group) %>%
   filter(value < quantile(value, probs = 0.99))
# A tibble: 6 x 2
# Groups:   group [2]
#   group value
#  <fctr> <dbl>
#1      A    60
#2      A    50
#3      A    40
#4      B     3
#5      B     5
#6      B     4

或与 data.table 类似的语法>

library(data.table)
setDT(df)[, .(value = value[value < quantile(value, probs = 0.99)]), by = group]

或者使用 base R 使用 ave

df[with(df, as.logical(ave(value, group, FUN= function(x) x <quantile(x, probs = 0.99)))), ]

关于R:保持数据框中组的值低于 99 分位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47336149/

相关文章:

javascript - “null”不是 Google 图表的对象(选择菜单问题,onchange 事件)

mysql - 根据条件返回行字段

python - 使用 xarray 滚动分位数

r - 在直方图上绘制垂直分位数线

r - 在 ggplot 中的何处以及如何应用过滤器

r - 可以通过[.data.table()中的浏览器查看.SD吗?

r - 如何找到序列矩阵中两点之间的距离?

mysql - 为以下要求编写选择查询

r - 对齐多个 xts 时间序列图

r - 获取对应于每个四分位数的观测值