次のデータフレームから、データフレームから一度に 1 グループずつ外れ値を削除しようとしています。
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)
任意の助けが必要です。ありがとう