在数据框的特定位置计算异常值? [复杂的]
Calculating outliers within specific niches of a dataframe? [Complex]
我遇到了一个大问题,非常感谢您的帮助。本质上,我有一个看起来像这样的大型数据框。请注意所有这些 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
您可以使用 split
按 val_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
。
我遇到了一个大问题,非常感谢您的帮助。本质上,我有一个看起来像这样的大型数据框。请注意所有这些 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
您可以使用 split
按 val_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
。