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

Posted

技术标签:

【中文标题】计算数据框特定领域内的异常值? [复杂的]【英文标题】:Calculating outliers within specific niches of a dataframe? [Complex] 【发布时间】:2017-07-11 16:58:01 【问题描述】:

我在这里遇到了一个大问题,非常感谢您的帮助。本质上,我有一个看起来像这样的大型数据框。请注意,所有这些 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


代码:

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】:

您可以使用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

【讨论】:

我不知道那是一个命令!谢谢!之后是否像合并(持有人)一样简单? 这正是我要找的!!!非常感谢!!对于遇到类似问题的任何人来说,将数据带回到一个大集合中是非常简单的!只需使用 do.call 功能。对我来说,它看起来像这样。 z_combined_cost_dtrmnt

以上是关于计算数据框特定领域内的异常值? [复杂的]的主要内容,如果未能解决你的问题,请参考以下文章

熊猫数据框 - 删除异常值[重复]

删除数据框中列的每个因子的异常值

“需要领域迁移”,从领域数据库中检索值时出现异常

Python从数据中删除异常值

检查 Pandas 数据框的异常值 [重复]

使用百分位数从熊猫数据框中删除异常值