【发布时间】:2015-07-06 23:12:24
【问题描述】:
Car 100 200 300
Group1 34 35 34
Group1 57 67 34
Group1 68 76 6
Group2 45 23 23
我在检测数据框中的异常值时遇到了一些问题。我想检测每个组是否有一个完整的向量(一行)和对应的组向量(一到三行)的异常值。此外,我想检测一个特定行中是否存在异常值。对于这个问题,我找到了这个解决方案,但是使用此代码,我必须为每一行重复整个代码并检查表格是否为“TRUE”。是否有可能进行外部化?例如创建所有输出的矩阵,所以我只需要检查 >sum(matrix==TRUE)
代码:
x=as.numeric(data_without[1,1:400])
grubbs.flag <- function(x) {
outliers <- NULL
test <- x
grubbs.result <- grubbs.test(test)
pv <- grubbs.result$p.value
while(pv < 0.05) {
outliers <- c(outliers,as.numeric(strsplit(grubbs.result$alternative," ")[[1]][3]))
test <- x[!x %in% outliers]
grubbs.result <- grubbs.test(test)
pv <- grubbs.result$p.value
}
return(data.frame(X=x,Outlier=(x %in% outliers)))
}
grubbs.flag(x)
X Outlier
1 0.1157 FALSE
2 0.1152 FALSE
3 0.1163 FALSE
4 0.1165 FALSE
【问题讨论】: