Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 按条件从数据帧列表中删除异常值_R_Lm_Outliers - Fatal编程技术网

R 按条件从数据帧列表中删除异常值

R 按条件从数据帧列表中删除异常值,r,lm,outliers,R,Lm,Outliers,我尝试创建一个函数,通过cooks距离从数据帧列表中删除多个异常值。 目前存在一些问题: 我可以将第1部分表述为函数吗?我尝试了一些不可行的方法。我想为lm使用几个不同的变量,所以如果我可以使用colnumbers和数据帧的正则表达式语法作为输入参数,那就太好了 第2部分-绘图文件名不正确。它将列表中每个数据帧中的第一个观察值作为文件名。我怎样才能纠正这个问题 第3部分:不创建没有异常值的数据帧。打印消息后,函数结束。我找不到我的错误 数据(iris) iris.lst一般来说,在全局环境

我尝试创建一个函数,通过cooks距离从数据帧列表中删除多个异常值。 目前存在一些问题:

  • 我可以将第1部分表述为函数吗?我尝试了一些不可行的方法。我想为lm使用几个不同的变量,所以如果我可以使用colnumbers和数据帧的正则表达式语法作为输入参数,那就太好了

  • 第2部分-绘图文件名不正确。它将列表中每个数据帧中的第一个观察值作为文件名。我怎样才能纠正这个问题

  • 第3部分:不创建没有异常值的数据帧。打印消息后,函数结束。我找不到我的错误

  • 数据(iris)
    
    iris.lst一般来说,在全局环境中创建多个数据帧不是一个好的做法。列表总是一个更好的选择,它们易于管理

    第一部分-

    您可以在一个
    lappy
    函数中组合多个步骤。在第1部分中,我们在同一个
    lappy
    调用中一起应用
    lm
    cooks.distance
    函数

    master_data <- split(iris[, 1:2], iris$Species)
    
    data <- lapply(master_data, function(x) {
      cooks.distance(lm(Sepal.Length ~ Sepal.Width, data = x))
    })
    new_names <- paste0(levels(iris$Species),"_data")
    names(data) <- new_names
    
    第三部分-

    我不太清楚您希望如何执行第3部分,但现在我将分别显示异常值和数据

    remove_influential_cases <- function(x, y){
      inds <- x > 3*mean(x, na.rm=TRUE)
      y[!inds, ]
    }
    
    result <- Map(remove_influential_cases, data, master_data)
    

    删除有影响力的案例您好,非常感谢。我尽我最大的努力在将来处理列表。关于第3部分的棘手之处在于,我想从原始数据帧中删除异常值,而不是从具有cooks距离的列表中删除。对于单个数据帧来说很容易。。。如果您只需要OG_DF[!COOK_DF_INDEX],那么对于iris,原始数据帧有4列。因此,我尝试提取每个数据帧的row.name,它与cooks距离数据帧相同。但不知怎的,我失败了……cooks距离矩阵是根据测试条件(3 x平均CD)通过过滤来识别异常值的。嗨,我会在晚上检查它,让你知道它是否有效。到目前为止,我还没有遇到Map函数。我已经找到了另一个解决方案,我稍后也会发布!
    
    plots <- function(x, y){
      jpeg(file=paste0(y,".jpeg")) 
      plot(x, pch="*", cex=2, main="Influential cases by Cooks distance")
      abline(h = 3*mean(x, na.rm=T), col="red") #  add cutoff line
      text(x=1:length(x)+1,y=x,labels=ifelse(x > 3*mean(x, na.rm=T),y,""), col="red")
      dev.off()
    }
    Map(plots, data, names(data))
    
    remove_influential_cases <- function(x, y){
      inds <- x > 3*mean(x, na.rm=TRUE)
      y[!inds, ]
    }
    
    result <- Map(remove_influential_cases, data, master_data)