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

Substitute outliers depending on quartile and group

我有以下数据框:

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

有什么帮助吗?

您可以使用 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)
)