2016-05-30 5 views
-1

既存のデータフレームに異常値を挿入する関数を作成しようとしています。データフレームに異常値を挿入する

オリジナルのデータフレームのmaxminの値を使用して、新しいデータフレームoutsの作成を開始しました。このoutsデータフレームには、特定のamountのアウトライアドデータが含まれます。 後で元のデータフレームにoutsデータフレームのアウトライアされた値を挿入します。

私が得たいのは、元のデータフレームに特定量の異常値を注入する機能です。 私は、例えば、異なる問題を抱えている:私は正しく使用していますが、外れ値のデータフレームを作成するためにrunifと第二私はtemp

今まで私が試したコードに外れ値を注入する方法がわからない場合、私は知っていますか:

addOutlier <- function (data, amount){ 
maxi <- apply(data, 2, function(x) (mean(x)+(3*(sd(x))))) 
mini <- apply(data, 2, function(x) (mean(x)-(3*(sd(x))))) 
temp <- data 
amount2 <- ifelse(amount<1, (prod(dim(data))*amount), amount) 
outs <- runif(amount2, 2, min = mini, max = maxi) # outliers 
if (amount2 >= prod(dim(data))) stop("exceeded data size") 
for (i in 1:length(outs)) 
    temp[sample.int(nrow(temp), 1), sample.int(ncol(temp), 1)] <- outs 
return (temp) 
} 

この作品を作るために任意のヘルプは、深く

+0

あなたの目標を理解しているかどうかはわかりませんが、あなたのコードに誤りがあると思います。 'runif(n、mini、maxi)'は、あなたが定義した2つの極端な値の間に 'n'の値を与えます。外れ値になることはまずありませんし、確かに1になることは保証されていません。 –

+0

@Alex私は問題を見る、どのように私が外れ値を持つことを保証するために作ることができるかの提案 – mina

+0

"外れ値"の意味を明確に定義していない....明らかに 'runif(n、-Inf、mini)' 、 'runif(n、maxi、Inf)'は動作しますが、それはおそらく現実的ではありません。 –

答えて

1

私の理解では、何を達成しようとしていることは、あなたのベクトル内の各列に外れ値の設定量を追加していることである理解されるだろうしてください。あるいは、各列に異常値の%を追加する方法もあります。私は前者の場合に限って解決策を書きましたが、本当に必要な場合は後者を実装するのは簡単です。どのようにして何が起こっているのかを明らかにするのに役立ちます。お役に立てれば!

add.outlier.to.vector <- function(vector, amount) { 
    cells.to.modify <- sample(1:length(vector), amount, replace=F) 
    mean.val <- mean(vector) 
    sd.val <- sd(vector) 
    min.val <- mean.val - 3 * sd.val 
    max.val <- mean.val + 3 * sd.val 
    vector[cells.to.modify] <- runif(amount, min=min.val, max=max.val) 
    return(vector) 
} 
add.outlier.to.data.frame <- function (temp, amount){ 
    for (i in 1:ncol(temp)) { 
    temp[,i] <- add.outlier.to.vector(temp[,i], amount) 
    } 
    return (temp) 
} 

data <- data.frame(
    a=c(1,2,3,4), 
    b=c(7,8,9,10) 
) 
add.outlier.to.data.frame(data, 2) 
+0

有用な関数ですが、データセットの元の平均値を保持できる方法があります。したがって、注入された外れ値を見ることができます – mina

関連する問題