0

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

# 输出变量 - 在每个循环之前运行
计数器0<-1
过程代码<-NULL
数字<-NULL
Min_Times<-NULL
Max_Times<-NULL
平均时间<-NULL
中值时间<-NULL
SD_Times<-NULL

#循环遍历所有程序代码
而(计数器0<=number_of_different_procedurecodes){
  a_g_procedures2<-NULL
  过程名称<-eval(list_of_procedurecodes[Counter0])
  过程名称<-unlist(过程名称)
  打印(程序名称)
  a_g_procedures2$Duration<-NULL
  持续时间<-NULL
  number_of_procedures<-0
  #特定过程的子集数据
  a_g_procedures2<-subset(a_g_procedures1,ProcedureCode==Procedure_Name)
  number_of_procedures<-length(a_g_procedures2$ProcedureCode)
  计数器1<-1

  #循环特定过程
  而(计数器 1<=number_of_procedures){
   a_g_procedures$Duration<-NULL
    TimeIn_1_Selected<-a_g_procedures2$"TimeIn_1"[Counter1]
    TimeIn_1_Selected<-as.POSIXct(TimeIn_1_Selected,format="%d/%m/%Y %H:%M")
    TimeIn_1_S<-as.numeric(TimeIn_1_Selected)
    
    TimeIn_2_Selected<-a_g_procedures2$"TimeIn_2"[Counter1]
    TimeIn_2_Selected<-as.POSIXct(TimeIn_2_Selected,format="%d/%m/%Y %H:%M")
    TimeIn_2_S<-as.numeric(TimeIn_2_Selected)
    
    TimeOut_Selected<-a_g_procedures2$"TimeOut"[Counter1]
    TimeOut_Selected<-as.POSIXct(TimeOut_Selected,format="%d/%m/%Y %H:%M")
    
    
    如果 (TimeIn_1_S>TimeIn_2_S) {
      
      Start_Time<-TimeIn_2_Selected
    }
    如果 (TimeIn_1_S<=TimeIn_2_S) {
      Start_Time<-TimeIn_1_Selected
    }
    打印(开始时间)
    打印(TimeOut_Selected)
    
    持续时间<-difftime(TimeOut_Selected, Start_Time, units = "mins")
    持续时间<-c(持续时间,持续时间)

    计数器 1<-计数器 1+1
  }
  
  Procedure_codes<-c(Procedure_codes,Procedure_name)
  持续时间<-as.numeric(持续时间)
  平均时间<-平均(持续时间,数字=1)
  SD_Time<-sd(持续时间,na.rm=TRUE)
  Min_Time<-min(持续时间,na.rm=TRUE)
  Max_Time<-max(持续时间,na.rm=TRUE)
  Median_Time<-median(持续时间,na.rm=TRUE)
  Average_Times<-c(Average_Times,Mean_Time)
  SD_Times<-c(SD_Times,SD_Time)
  Min_Times<-c(Min_Times, Min_Time)
  Max_Times<-c(Max_Times, Max_Time)
  Median_Times<-c(Median_Times, Median_Time)
  Number<-c(Number,number_of_procedures)
  计数器0<-计数器0+1  
}

ag_output<-data.frame(Procedure_codes,Number,Min_Times, Max_Times, Average_Times, Median_Times, SD_Times)

这是我希望通过特定过程添加到循环中的内容:

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)

有人知道我该怎么做吗?

非常感谢您!

4

1 回答 1

0

让它成为一个功能?

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

于 2020-06-22T10:37:52.683 回答