2017-11-16 8 views
2

グループと値を持つデータフレームがあります。まず、グループあたり99%の分位数を計算します。今、私はすべてのグループの99%分位以上の値を削除したいと思います。私は低い値を選択するために、変位値のベクトルを適用しようとした個々のグループR:データdrameのグループの値を99 quantil未満に保ちます。

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<-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 

計算quantils。データフレームのグループで99%以下の値のみを保つために変位値のベクトルを適用する方法

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

:しかし、それは...

df[df$value < quant$x,] 

期待される結果をグループ仕様を欠場しますか?

答えて

3

我々はdata.table

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

それともave

を使用して base Rを使用して

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 

または類似の構文をグループ化した後filterを行うことができます

df[with(df, as.logical(ave(value, group, FUN= function(x) x <quantile(x, probs = 0.99)))), ] 
関連する問題