如何在R中检测和删除循环中的异常值?



希望有人能为绝望的学生提供帮助:-( 我有一组程序代码,我有不同数量的手术(此处:程序(及其各自的持续时间。我想获得一些关于持续时间的描述性统计数据。为此,我希望我的循环已经通过 IQR 函数检测并删除异常值。这是没有异常值检测和删除的代码:

# 输出变量 - 在每个循环之前运行 计数器0<-1 Procedure_codes<-空 数字<-空 Min_Times<-空 Max_Times<-空 Average_Times<-空 Median_Times<-空 SD_Times<-空 #loop 所有程序代码 而(计数器0<=number_of_different_procedurecodes( { a_g_procedures2<-空 Procedure_Name<-eval(list_of_procedurecodes[计数器0]( Procedure_name<-取消列表(Procedure_Name( 打印(Procedure_Name( a_g_procedures2$持续时间<-空 持续时间<-空 number_of_procedures<-0 #Subset 特定程序的数据 a_g_procedures2<子集(a_g_procedures1,过程代码>TimeIn_2_S( { Start_Time<-TimeIn_2_Selected } 如果 (TimeIn_1_S<=TimeIn_2_S( { Start_Time<-TimeIn_1_Selected } 打印 (Start_Time( 打印(TimeOut_Selected( 持续时间<-差异时间(TimeOut_Selected, Start_Time, 单位 = "分钟"( 持续时间<-c(持续时间,持续时间( 计数器1<-计数器1+1 } Procedure_codes<-C(Procedure_codes,Procedure_name( 持续时间<-as.numeric(持续时间( Mean_Time这是我想添加到特定过程循环中的内容:

Q<-quantile(Duration, probs=c(.25,.75), na.rm=FALSE)
iqr<-IQR(Duration)
up<-Q[2]+1.5*iqr
low<-Q[1]-1.5*iqr
remove<-Duration>(Q[1]-1.5*iqr) & Durations<(Q[1]-1.5*iqr)
setdiff(Duration, remove)

有人知道我该怎么做吗?

提前非常感谢!

把它变成一个函数?

f.remove_outliers_IQR <- function(Duration)
{
Q <- quantile(Duration, probs=c(.25,.75), na.rm=FALSE)
iqr <- IQR(Duration)
up <- Q[2]+1.5*iqr
low <- Q[1]-1.5*iqr
remove <- Duration>(Q[1]-1.5*iqr) & Durations<(Q[1]-1.5*iqr)
Duration_out <- setdiff(Duration, remove)
return(Duration_out)
}

并在主循环中调用它,也许就在Counter1<-Counter1+1之前?

最新更新