2016-09-23 19 views
1

上下限+/- 3 * IQRの範囲外のデータ点をNAに設定しようとしています。私が抱えている課題は、データのグループによってこれを行う方法です。関数 "by"のブール値出力を入力ベクトルに一致させる方法

例として、以下のデータセットには分割列と値列があります。各分割について、私は値の列の上位と下位の分位数とIQRを計算し、上の条件を満たす値列のデータ点をNAに設定する必要があります。私はNAにデータポイントを設定するために、「非公開に」と出力を使用

out <- by(
    x$Value, 
    x$Split, 
    function(y) 
    y < (quantile(y, probs=c(.25, .75), na.rm = T)[1] - 3*IQR(y, na.rm = T)) | 
    y > (quantile(y, probs=c(.25, .75), na.rm = T)[2] + 3*IQR(y, na.rm = T))) 

ザ:私はNAに設定する必要がある値を識別するための機能「によって」を使用している

x <- structure(list(Split = c(1L, 1L, 3L, 2L, 2L, 2L, 2L, 1L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 3L, 1L, 3L, 2L, 3L), Value = c(0.9, 0.9, 3.5, 2.2, 2.2, 2.2, 2.2, 0.9, 3.5, 3.5, 3.5, 1.1, 3.5, 0.9, 1.9, 3.4, 0.9, 3.5, 2.2, 3.5)), .Names = c("Split", "Value"), class = "data.frame", row.names = c(NA, -20L)) 

x$Value[unlist(out)] <- NA 

これは機能しません。 Reasonは、 "by"出力とx $ Value列の異なるソートです。

両方の出力をどのように一致させ、対応する値をNAに設定するかに関する提案はありますか?

ありがとうございました。

答えて

1

あなたはbyから分割逆にunsplitの代わりunlistを使用することができます分割を決定する因子としてx$Splitを使用して、再び

x$Value[unsplit(out, x$Split)] <- NA 
## Split Value 
##1  1 0.9 
##2  1 0.9 
##3  3 3.5 
##4  2 2.2 
##5  2 2.2 
##6  2 2.2 
##7  2 2.2 
##8  1 0.9 
##9  3 3.5 
##10  3 3.5 
##11  3 3.5 
##12  3 NA 
##13  3 3.5 
##14  1 0.9 
##15  1 NA 
##16  3 NA 
##17  1 0.9 
##18  3 3.5 
##19  2 2.2 
##20  3 3.5 

を。

関連する問題