1
私は自分のデータフレームの異常値を検出し、異常値をNAsに置き換えようとしています。 私はここに提供されている機能を少し変更しました: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