2017-03-16 6 views
0

切り捨てられたバージョン

truncate1 <- function(x, prop=.01) { 
      trimx <- x[x < quantile(x,prob=(1-prop))] 
      return(trimx) 
} 

データの切り捨てバージョン

TRU_BANK <- as.data.frame(BANK) 

外れ値

TRU_BANK$VaR <- truncate1(BANK$TVAR_AVG) 

Error in `$<-.data.frame`(`*tmp*`, "VaR", value = c(19.6, 35.2, 26.9, : 
replacement has 501 rows, data has 507 
のために制御する独立変数のウィンザライズエラーを克服することはできません

このエラーを解決するにはどうすればよいですか?は私のデータをトリミングし、データの

答えて

1

問題は、関数から返されるベクトルに、同じ数の項目がないためです。あなたの関数は、引数として項目の同じ番号を返し、それはdata.frameの別の列に割り当てることができるように、このコードを使用して、それは、NASを追加します。

truncate1 <- function(x, prop=.01) { 
    trimx <- rep(NA, length(x)) 
    trimx[x < quantile(x,prob=(1-prop))]<- x[x < quantile(x,prob=(1-prop))] 
    return(trimx) 
} 
TRU_BANK$VaR <- truncate1(BANK$TVAR_AVG) 

別のソリューションを使用すると、外れ値を削除する場合data.frameを残したい行のインデックスを返してから、その後、data.frameフィルタリング:

truncate2 <- function(x, prop=.01) { 
    trimx <- x < quantile(x,prob=(1-prop)) 
    return(trimx) 
} 
TRU_BANK <- BANK[truncate2(BANK$TVAR_AVG),] 
+0

をしかし、私は外れ値を除外することをトリミングの全体のポイントではないでしょうか? –

+0

実際にいくつかの要素を削除した場合、オリジナルのdata.frameよりも少ない項目しか持たないため、別の列に格納することはできません(すべての列の項目数は同じでなければなりません)。 – HubertL

関連する問題