【问题标题】:How to mutate a subset of a group in r如何在 r 中改变一个组的子集
【发布时间】:2018-08-28 12:13:25
【问题描述】:

我无法在 R 中改变我的 df。我的 df 看起来像这样

df< 
      I    class part      datetime             value    indicator
     <int> <chr> <chr>   <S3: POSIXct>          <dbl>     <dbl>
1       1   A    part1  2016-12-15 10:43:08     0.12       0
2       1   A    part2  2015-11-16 13:52:07     0.15       0
3       1   A    part3  2015-11-16 15:37:27     1.20       0
4       2   A    part1  2015-11-16 15:43:03     0.78       1
5       2   A    part2  2015-11-16 16:01:03     0.14       1
6       2   A    part3  2015-11-05 07:10:02     1.40       1
...    ...  ...   ...       ...                 ...       ...

我正在尝试删除组指示器中第 1 部分的极端异常值(0 或 1)

我试过了

    remove_outliers <- function(x, na.rm = TRUE, ...) {
      qnt <- quantile(x, probs=c(.25, .75), na.rm = na.rm, ...)
      H <- 3.0 * IQR(x, na.rm = na.rm)
      y <- x
      y[x < (qnt[1] - H)] <- NA
      y[x > (qnt[2] + H)] <- NA
      y
    }

dfNew <- df %>%
  group_by(indicator, part) %>% 
  mutate(value = remove_outliers(value[part="part1"])) %>%
  ungroup()

这会删除所有值。如何仅删除第 1 部分的组指标中的极端异常值?

【问题讨论】:

  • 异常值是 1.5*IQR 而不是 3*IQR
  • 真的,我是用 3*IQR 来保持温和的

标签: r group-by outliers dplyr


【解决方案1】:

您的代码中的 2 个错误 value[part="part1"] 应该有一个“==”而不是一个“=”并且放错了位置,因为 value[part=="part1"] 比 value 短。您需要在治疗开始时进行子集化

dfNew  <- subset(df,part=="part1") %>%
  group_by(indicator, part) %>% 
  mutate(value = remove_outliers(value)) %>%
  ungroup()

获取整个数据集,而不仅仅是作为结果的子集

mutate_cond <- function(.data, condition, ..., envir = parent.frame()) {
  condition <- eval(substitute(condition), .data, envir)
  .data[condition, ] <- .data[condition, ] %>% mutate(...)
  .data
}

dfNew =df %>%
  group_by(indicator, part) %>% 
  mutate_cond(part=="part1",value = remove_outliers(value)) %>%
  ungroup()

修改后对我有用

【讨论】:

  • 感谢您的编辑。我尝试运行它,但 dfNew 不再有其他部分,只有子集(part1)
  • 我进行了编辑,以便它执行您想要的操作并保留整个数据集。希望对您有所帮助!
猜你喜欢
  • 2015-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-15
  • 2021-09-03
  • 2018-10-12
  • 1970-01-01
  • 2020-03-03
相关资源
最近更新 更多