我正在尝试从以下数据框中一次删除一组数据框中的异常值:
set.seed(1234)
library('mvoutlier')
x <- rnorm(10) # standard normal
x[1] <- x[1] * 10 # introduce outlier
y <- rnorm(10) # standard normal
y[4] <- y[4] * 10 # introduce outlier
w <- rnorm(10) # standard normal
w[9] <- w[9] * 10 # introduce outlier
grp = c(rep('a',3), rep('b',4), rep('c',3)) #Introduce groups
df = data.frame(grp, x,y,w)
数据框如下所示:
> df
grp x y w
1 a -12.0706575 -0.4771927 0.1340882
2 a 0.2774292 -0.9983864 -0.4906859
3 a 1.0844412 -0.7762539 -0.4405479
4 b -2.3456977 0.6445882 0.4595894
5 b 0.4291247 0.9594941 -0.6937202
6 b 0.5060559 -0.1102855 -1.4482049
7 b -0.5747400 -0.5110095 0.5747557
8 c -0.5466319 -0.9111954 -1.0236557
9 c -0.5644520 -0.8371717 -0.1513830
10 c -0.8900378 2.4158352 -0.9359486
我编写了以下函数来从数据框中删除异常值:
removeOutliers = function(data)
{
print("inside")
print(dim(data))
z = sign2(data[, -which(colnames(data)=="grp")],makeplot=FALSE)
idx = which(z$wfinal01==0) #Get the index of outliers
return(data[-idx,]) #Return the remaining rows
}
我想为每个组分别删除异常行(即a
, b
, ans c
)。我需要将具有 group 的子数据帧传递a
给上述函数并收集结果并对 groupb
和c
.
我知道aggregate
可以在这里使用该功能,但不确定如何实现。
aggregate( . ~ grp, data=df, removeOutliers)
任何帮助appriciated。谢谢