按R的列和因子删除异常行

问题描述 投票:0回答:1

我正在使用R中的数据帧。我具有以下功能,该功能删除数据帧df的所有行,其中,对于指定的列索引/属性,该行的值在(列)的正负n * stdev(列)。

remove_outliers <- function(df,attr,n){
  outliersgone <- df[df[,attr]<=(mean(df[,attr],na.rm=TRUE)+n*sd(df[,attr],na.rm=TRUE)) & df[,attr]>=(mean(df[,attr],na.rm=TRUE)-n*sd(df[,attr],na.rm=TRUE)),]
  return(outliersgone)
}

我的问题有两个部分。

(1)我的数据框df也具有列“ Group”,该列指定类标签。我希望能够根据列中的均值和标准偏差在其组内,即按因子(在列内)进行组织,从而删除异常值。因此,如果在指定的列/属性中,该行的值超出平均值(该列中的A组行的平均值)加上/减去n * stdev(该组的平均值),则将从数据框中删除标有A组的行该列中的一行)。与B,C,D,E,F等组相同。

我该怎么做? (最好仅使用基数R和dplyr。)我尝试使用df %>% group_by(Group),然后使用mutate,但由于函数remove_outliers似乎需要整个数据帧,因此我不确定要传递什么变量传递给它(因此它可以基于所选属性attr返回仅包含行removed的整个数据帧)。

我也乐于听取有关更改功能remove_outliers的建议,只要它们还返回所说明的整个数据帧即可。我希望解决方案尽可能避免循环(除非不可避免,并且在基本R / dplyr中没有更有效的方法出现)。

((2)是否有一种直接的方法可以组合跨多列的异常值注意事项?例如从数据框df中删除那些在指定的属性/列索引向量(长度≥N)中至少具有$ N $个属性的异常行。或更复杂的条件,例如,从数据框df中删除那些与属性1 属性2、4、6、8中的至少2个相离的行。

(理想情况下,离群值的定义将再次在列内的组内,如上面问题1所述,但是一种仅在列内工作而不考虑组的解决方案对我也很有用。)

我正在使用R中的数据帧。我具有以下函数,该函数删除数据帧df的所有行,其中,对于指定的列索引/属性,该行的值在(.. 。

r dataframe dplyr filtering outliers
1个回答
0
投票

确定-第1部分(并尽可能避免循环):

© www.soinside.com 2019 - 2024. All rights reserved.