[英]R: Keep values below the 99 quantile for groups in data frame
我有一個包含組和值的數據框。 首先,我計算每組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]
或者使用ave
使用base R
df[with(df, as.logical(ave(value, group, FUN= function(x) x <quantile(x, probs = 0.99)))), ]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.