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