我用R包检验了我的数据缺失值为0,但是运行代码还会报错有缺失。
检验代码:
> sum(is.na(Dat))
[1] 0
报错代码:
Error in `[<-.data.frame`(`*tmp*`, Dat[, i] >= outlier_limup | Dat[, i] <= : 执行数据框下标赋值时是不允许遗漏值的 In addition: Warning message: In as.numeric(as.character(Dat[, i])) : NAs introduced by coercion
整体代码:
setwd("E:\\Desktop\\课题新\\0.数据原表")
getwd()
#去除数据中每一列的异常值,只需要输入数据即可(修改dat的名称),需要确保输入的数据每一列都需要去除极值
Dat<-read.table("株高.csv")#dat为输入数据,即需要去除极端值的数据框或者矩阵
sum(is.na(Dat))
for (i in 1:ncol(Dat)) {
Dat[, i] <- as.numeric(as.character(Dat[, i]))#将目标列修改为数值型变量
outlier_limup <-
3 * IQR(Dat[, i], na.rm = TRUE) + quantile(Dat[, i], 3 / 4, na.rm = TRUE, names = FALSE)#极端值上界 :Q3+k(Q3-Q1)
outlier_limdown <-
quantile(Dat[, i], 1 / 4, na.rm = TRUE, names = FALSE) - 3 * IQR(Dat [, i], na.rm = TRUE) #3*极端值下界 :Q1-k(Q3-Q1)
Dat[Dat[, i] >= outlier_limup |
Dat[, i] <= outlier_limdown, i] = ""
}
生信小学生