使用R中的data.table从组中删除异常值

时间:2015-10-21 10:56:59

标签: r data.table

我有一个包含组列的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,但是,它太乱了。我怎么会轻松地#34;从data.table中的每个组中删除前n%的异常值,而不需要进行太多的数据转换?

1 个答案:

答案 0 :(得分:6)

假设您要根据95%分位数根据col2dt_filt <- dt[, .SD[ ((col1 < quantile(col1, probs = 0.95)) & (col2 < quantile(col2, probs = 0.95))) ], by = group ] 移除异常值:

group

基本上根据col1列拆分数据,计算阈值,然后对数据进行子集以仅保留col2和{{1}}低于阈值的行。< / p>