我有一个包含组和值的数据框。首先,我计算每组 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/