按R的列和因子删除异常行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了按R的列和因子删除异常行相关的知识,希望对你有一定的参考价值。
我正在使用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的所有行,其中,对于指定的列索引/属性,该行的值在(.. 。
确定-第1部分(并尽可能避免循环):
以上是关于按R的列和因子删除异常行的主要内容,如果未能解决你的问题,请参考以下文章