根据四分位数和组别替换异常值

时间:2017-09-11 08:36:05

标签: r outliers

我有以下数据框:

d = 
id group value
1  A     1
2  A     2
3  A     10
4  B     100
5  B     200
6  B     1000

我想用NA替换99%四分位数以上的值,具体取决于他们所属的组。在这个例子中将是观察(id)3和6.到目前为止,我有这段代码可以完成我想要的但不依赖于每个组。

d[ d$value.TA < quantile(d$value, 0.99), 'value'] <- NA

任何帮助?

1 个答案:

答案 0 :(得分:5)

您可以使用dplyr中的group_by()函数:

library(dplyr)

d <- d %>%
  group_by(group) %>%
  mutate(value.TA = ifelse(value < quantile(value, 0.99),
                           value, NA)) %>%
  ungroup()

> d    
# A tibble: 6 x 4
     id  group value value.TA
  <int> <fctr> <dbl>    <dbl>
1     1      A     1        1
2     2      A     2        2
3     3      A    10       NA
4     4      B   100      100
5     5      B   200      200
6     6      B  1000       NA

数据:

d <- data.frame(
  id = seq(1, 6),
  group = rep(c("A", "B"), each = 3),
  value = c(1,2,10,100,200,1000)
)
相关问题