我有一个包含组列的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)
Run Code Online (Sandbox Code Playgroud)
我一直在尝试按组变量拆分data.frame,但是,它太乱了.如何在没有太多数据转换的情况下"轻松"从data.table中的每个组中"删除"前n%的异常值?
小智 6
假设您要根据两者col1
并col2
根据95%分位数删除异常值:
dt_filt <- dt[,
.SD[
((col1 < quantile(col1, probs = 0.95)) &
(col2 < quantile(col2, probs = 0.95)))
], by = group
]
Run Code Online (Sandbox Code Playgroud)
它基本上根据group
列拆分数据,计算阈值,然后对数据进行子集以仅保留行col1
和col2
低于阈值的行.