计算数据框特定壁龛内的异常值? [复杂]

时间:2017-07-11 16:58:02

标签: r dataframe data-manipulation outliers bigdata

我在这里遇到了一个大问题,我真的很感激一些帮助。基本上我有一个看起来像这样的大型数据框。请注意所有这些R代码都是终端而不是R STUDIO!

![数据帧] http://imgur.com/a/ftUZ5

我要做的是通过独特的val_lvl2处理来分隔数据帧。

以下是我想要做的代码,但规模要大得多。

功能代码:

remove_outliers <- function(x, na.rm = TRUE, ...) {
  qnt <- quantile(x, probs=c(.25, .75), na.rm = na.rm, ...)
  H <- 1.5 * IQR(x, na.rm = na.rm)
  y <- x
  y[x < (qnt[1] - H)] <- NA
  y[x > (qnt[2] + H)] <- NA
  y

}

CODE:

holder1 <- subset(z_combined_cost_dtrmnt, val_lvl2 ==  "Hammer Toe Repair")

holder1 <- holder1[!(holder1$episode_count <=3),]

holder1$prd_num_of_days_num <- remove_outliers(holder1$prd_num_of_days_num)

这将删除val_lvl2中Hammer Toe Repair的所有异常值长度,这正是我想要的。但是,我不想每次都这样做,因为有很多独特的治疗方法!在删除所有异常值后,我还需要删除NA列并将所有数据合并回一个数据帧“z_combined_cost_dtrmnt”,该数据帧现在应该为val_lvl2中的每个唯一处理唯一地删除所有异常值长度。在这一点上,上面的代码是我已经删除异常值,所以帮助将非常感谢,因为我很肯定有一个更有效的方法来做到这一点然后写出每个处理的代码!

以下是val_lvl2中的每一项独特处理:![唯一值] http://imgur.com/237OqCs

1 个答案:

答案 0 :(得分:0)

您可以使用splitval_lvl2级别创建数据框列表...

holders <- split(z_combined_cost_dtrmnt, z_combined_cost_dtrmnt$val_lvl2)

然后使用lapply将所需的任何函数应用于该列表的每个元素,例如

holders <- lapply(holders, function(x) x[!x$episode_count <= 3,])
holders <- lapply(holders, function(x){
                    x$prd_num_of_days_num <- remove_outliers(x$prd_num_of_days_num)
                    return(x) })

您最终会得到一个数据框列表,每个级别val_lvl2一个。