1
데이터 프레임에서 이상 치를 찾아 내고 NISA로 치를 대체하려고합니다. 여기 제공된 기능을 약간 수정했습니다 : How to repeat the Grubbs test and flag the outliers. 벡터에 대한 함수를 시도하면 멋지지만, 문제는 데이터 프레임에 사용할 때입니다. 이 함수는 특이 치를 검출하지만 결과를 데이터 프레임으로 가져 오는 방법을 알지 못합니다.색인을 사용하여 df의 값 바꾸기
결과적으로 원래 데이터 프레임이 NA
으로 바뀝니다. 여기서 NA
은 검출 된 아웃 라이어가됩니다.
이
내가 지금까지 시도 무엇 :library(outliers)
data("rock")
# Function to detect outliers with Grubbs test in a vector
grubbs.flag <- function(vector) {
outliers <- NULL
test <- vector
grubbs.result <- grubbs.test(test)
pv <- grubbs.result$p.value
# throw an error if there are too few values for the Grubb's test
if (length(test) < 3) stop("Grubb's test requires > 2 input values")
while(pv < 0.05) {
outliers <- c(outliers,as.numeric(strsplit(grubbs.result$alternative," ")[[1]][3]))
test <- vector[!vector %in% outliers]
# stop if all but two values are flagged as outliers
if (length(test) < 3) {
warning("All but two values flagged as outliers")
break
}
grubbs.result <- grubbs.test(test)
pv <- grubbs.result$p.value
idx.outlier <- which(vector %in% outliers)
na.vect <- replace(vector, idx.outlier, NA)
}
return(na.vect)
}
# Function to detect outliers with Grubbs test in a dataframe
Grubbs.df <- function(data){
grubbs.data <- (as.vector(unlist(apply(data, grubbs.flag))))
return(grubbs.data)
}
모든 아이디어를 어떻게이 일을하기 위해?
스크립트 끝 부분에 적용 및 as.vector와 관련이 있다고 생각합니다. 내 노트북에서 실행하고 무슨 일이 일어나는지 보자. – Ansjovis86