簡體   English   中英

R:對於數據幀中的組,將值保持在99分位數以下

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM