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

Eco*_*sca 0 r outliers

我有以下数据框:

d = 
id group value
1  A     1
2  A     2
3  A     10
4  B     100
5  B     200
6  B     1000
Run Code Online (Sandbox Code Playgroud)

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

d[ d$value.TA < quantile(d$value, 0.99), 'value'] <- NA
Run Code Online (Sandbox Code Playgroud)

有帮助吗?

Z.L*_*Lin 5

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

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
Run Code Online (Sandbox Code Playgroud)

数据:

d <- data.frame(
  id = seq(1, 6),
  group = rep(c("A", "B"), each = 3),
  value = c(1,2,10,100,200,1000)
)
Run Code Online (Sandbox Code Playgroud)