2017-03-16 33 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

問題是因爲從你的函數返回的向量沒有相同數量的項目,它需要。使用此代碼,這將增加的NA讓你的函數返回的項目作爲參數相同的數字,它可以被分配到data.frame的另一列:

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返回要保留的行的索引,然後過濾數據。框架:

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