dataframe中的离群值,但我想对R中dataframe中的分组行执行此操作

dataframe中的离群值,但我想对R中dataframe中的分组行执行此操作,r,outliers,R,Outliers,示例数据帧。 我想检测每个组的异常值,并将其显示在单独的数据框中,例如,对于每个物种名称,Anthoplera aureliata,我想查看值27.75、6.83和23.91,并计算这些值之间的异常值。如果我发现第4行是该特定物种的异常值,我想在我的新数据框中显示它。有人知道怎么做吗 可复制示例: x = data.frame("species" = c("Agao", "Beta", "Beta", "Beta", "Carrot", "Carrot"), "sum" = c(1, 100,

示例数据帧。

我想检测每个组的异常值,并将其显示在单独的数据框中,例如,对于每个物种名称,Anthoplera aureliata,我想查看值27.75、6.83和23.91,并计算这些值之间的异常值。如果我发现第4行是该特定物种的异常值,我想在我的新数据框中显示它。有人知道怎么做吗

可复制示例:

x = data.frame("species" = c("Agao", "Beta", "Beta", "Beta", "Carrot", "Carrot"), "sum" = c(1, 100, 5, 4, 3, 0))
我们可以根据需求修改函数,并使用它过滤每个组的异常值,并创建一个新的数据帧

library(dplyr)

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)
    x < (qnt[1] - H) | x > (qnt[2] + H)
}

separate_dataframe <- x %>% group_by(species) %>% filter(remove_outliers(sum))
separate_dataframe

# species   sum
#  <fct>   <dbl>
#1 Beta     -100

您可以使用
boxplot
boxplot(x$sum,plot=FALSE)$out
来识别异常值,但这不起作用,因为我需要物种列中每个组的异常值,所以我需要具有相同物种列的行的异常值。我认为您的方法对我的数据框架中的每个值都会这样做,只需执行一个
group\u by
operationx%>%group\u by(species)%%>%boxplot(sum,plot=FALSE)$out,您知道这为什么不起作用吗?Cheerri会做
x%>%groupby(species)%%>%变异(i1=sum%in%boxplot(sum,plot=FALSE)$out)%%>%ungroup
x = data.frame(species = c("Agao", "Beta", "Beta", "Beta", "Beta", 
              "Carrot", "Carrot"),sum = c(1, 1, 5, 4, -100, 3,0))