r - 如何按R中的列计算异常值?
问题描述
我的代码
dat <- read.csv("numeric.csv")
dat1 <- na.omit(dat)
##Function to calculate outliers
FindOutliers <- function(data) {
lowerq = quantile(data)[2]
upperq = quantile(data)[4]
iqr = upperq - lowerq #Or use IQR(data)
# we identify extreme outliers
extreme.threshold.upper = (iqr * 3) + upperq
extreme.threshold.lower = lowerq - (iqr * 3)
result <- which(data > extreme.threshold.upper | data < extreme.threshold.lower)
}
out_dat <- names(dat1)
out_dat <- as.data.frame(out_dat)
for (dat in seq_along(dat1)){
temp <- FindOutliers(dat)
out_dat$outlier_count <- length(temp)
}
如果单独传递每一列,但通过传递整个数据框,我能够得到异常值,我无法重现相同的结果。
样本数据集
df <- read.table(text = "
var1 var2 var3 var4 var5 var6 var7
a 1 1 10 10 1 1 1
b 10 1 1 1 1 1 851
c 1 1 1 1 1 1 158
d 1 1011 1 1 1 5 1
e 1 1 55 1 9 1 1
f 1 1 1 1 1 781 1
", header = TRUE)
解决方案
你可以通过应用来做到这一点。
FindOutliers <- function(data) {
lowerq = quantile(data)[2]
upperq = quantile(data)[4]
iqr = upperq - lowerq #Or use IQR(data)
# we identify extreme outliers
extreme.threshold.upper = (iqr * 3) + upperq
extreme.threshold.lower = lowerq - (iqr * 3)
result <- which(data > extreme.threshold.upper | data < extreme.threshold.lower)
length(result)
}
apply(df, 2, FindOutliers)
推荐阅读
- javascript - 创建 ES6 JavaScript 类成员的最有效方法是什么?
- python - 迭代目录中的文件并将具有相同名称的文件放入不同的列表中
- dplyr - 没有适用于 'mutate_' 的方法应用于“c('matrix', 'double', 'numeric') 类的对象
- phpstorm - 如何在 PhpStorm 中的 PHP 文件中突出显示 HTML
- dart - 这两个typedef有什么区别?
- java - 如果文件/连接资源在运行时未关闭,如何查找 Java 资源泄漏。?
- javascript - 如何使用 JXA 替换 Pages (iWork) 中的 placeholderTexts?
- r - 使用列的内容在 R 中创建一个新列
- activemq - ActiveMQ Prometheus Metrics,如 enque deque count 用于监控
- neural-network - 循环尖峰神经网络