【问题标题】:Substitute outliers depending on quartile and group根据四分位数和组替换异常值
【发布时间】:2017-09-11 08:36:05
【问题描述】:

我有以下数据框:

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

我想根据它们所属的组将那些高于 99% 四分位数的值替换为 NA。在此示例中将是观察 (id) 3 和 6。到目前为止,我有这段代码可以执行我想要的操作,但不依赖于每个组。

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

有什么帮助吗?

【问题讨论】:

    标签: r outliers


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2021-10-12
      • 1970-01-01
      • 2019-10-31
      • 2018-04-21
      • 2020-05-02
      • 1970-01-01
      • 1970-01-01
      • 2020-06-09
      • 2017-07-01
      相关资源
      最近更新 更多