我有一个包含30列和超过10,000行的数据框。
如何运行离群值分析,针对一组变量返回一个TRUE(如果任何变量超过特定阈值),或者如果所有变量的异常值阈值(3SDs)未达到,则返回FALSE,并在一个新列中显示TRUE/FALSE值?
我已使用quantile找到每个变量的3个标准差截止值:
例如:
quantile(df$a, 0.003, na.rm = T) #and
quantile(df$a, 0.997, na.rm = T)
假设该变量的第一个值为2.5,上限值为10.5,我随后创建了一个新变量:
df$outliers <- (df$a <- df$a <2.5 | df$a > 10.5)
当列a中的值小于2.5或大于10.5时,该函数会返回TRUE值。
我想做的是,让df$outliers代表一组列(不仅仅是一个列)的离群值状态,例如d、e、f、g、l、m等列,它们都有自己的阈值需要满足。
最好的方法是什么?
data.table
,能否将其转换为data.frame
,然后尝试上述操作? - Ronak Shahsappy
之后添加了na.rm
,即:sapply
,na.rm = T(df [cols],function ...
但是现在我遇到了这个错误:Error: attempt to apply non-function。 - stat.chatquantile
函数中添加该参数。尝试使用以下代码:df$outliers <- rowSums(sapply(df[cols], function(x) x < quantile(x, 0.003, na.rm = TRUE) | x > quantile(x, 0.997, na.rm = TRUE))) > 0
- Ronak Shah