【问题标题】:Removing outliers from groups using data.table in R使用 R 中的 data.table 从组中删除异常值
【发布时间】:2015-10-21 10:56:58
【问题描述】:

我有一个包含 group 列的 data.table 对象。我正在尝试从每个组中删除异常值,但是我无法为此提出很好的解决方案。我的 data.table 可以使用简单的脚本构建:

col1 <- rnorm(30, mean = 5, sd = 2)
col2 <- rnorm(30, mean = 5, sd = 2)
id <- seq(1, 30)
group <- sample(4, 30, replace = TRUE)
dt <- data.table(id, group, col1, col2)

我一直在尝试按组变量拆分 data.frame,但是,这种方法太混乱了。如何在不进行太多数据转换的情况下“轻松”从 data.table 中的每个组中删除前 n% 的异常值?

【问题讨论】:

  • 异常值根据什么?科尔1?科尔2?还是两者兼而有之?
  • 两列的异常值,但在更一般的情况下,任何列的异常值

标签: r data.table


【解决方案1】:

假设您要根据col1col2 删除异常值,基于95% 分位数:

dt_filt <- dt[, 
    .SD[
        ((col1 < quantile(col1, probs = 0.95)) & 
         (col2 < quantile(col2, probs = 0.95)))
    ], by = group
]

它基本上根据group 列拆分数据,计算阈值,然后对数据进行子集化以仅保留col1col2 低于阈值的行。

【讨论】:

    猜你喜欢
    • 2021-12-26
    • 2018-10-03
    • 2012-08-11
    • 2017-04-24
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多