首页 > 解决方案 > 如何按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)

标签: r

解决方案


你可以通过应用来做到这一点。

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)

推荐阅读