2016-10-29 8 views
1

私は外れ値を座標とグループでRで見つける必要があります。RでX座標とY座標を持つグループ別にデータフレーム内の異常値を見つけるには?

マイデータフレームは次のようになります。

22334444 
22335544 
11335552 

しかし、私は自動でグループが異常値を得ることができませんでした:

Name, Group, X, Y 
Bob, 2, -300, 20 
Karl, 4, 200, 10 
Sara, 2, -298, 19 
Hans, 4, 210, 12 
Anna, 3, -700, 100 
Maria,3, -690, 110 
Lars, 2, 100, 50 
etc. 

私は次のようになりますグループによる散布図を作るために管理しました新しいデータフレームとしてのクラスタリング(最近傍点?)

(ラースのように、彼は遠く離れてグループ2から、他の人からである)

グループによってあなたの行列をサブセットループについてどのように
Outliers_DF 
    Name, Group,X, Y 
    Lars, 2, 100, 50 
    Sam, 3, 900, 70 
    Trixi, 11, 200 , 2 
+0

グループごとにデータフレームをサブセット化して、グループごとに行列を与え、それぞれに 'hclust(dist())'を実行する方法はありますか?外側のノードはより大きな高さでマージされます。 – Joe

+0

私は、1つのグループでhclust(dist(df [、5:6]))を使ってみました。 コール: hclust(D = DIST(DF [5、6])) クラスタ方法:完全 距離:オブジェクトの 数ユークリッド:2 5及び図6は、私はこれを取得し、XおよびY columsあります私はここから何をするべきかを理解していません – JonaH

+0

あなたはいくつの観察とグループを持っていますか?おそらく私たちにあなたのdfのより大きなサンプルを与えるでしょう。 – Joe

答えて

0

のようにDFを持っていいだろう各部分集合の距離行列に対して階層的クラスタリングを実行する。その後、出力内の各hclustオブジェクトから最も遠い観測の詳細を取得できます。最初にグループ列を取得し、グループの一意の数を見つけてから、この長さのリストを出力に事前に割り当てます。

grpcol <- df$Group 
ngroup <- unique(grpcol) 
output <- vector("list", length(unique(grpcol))) 

は今、我々はループを実行します。「df内のすべてのグループの場合、その距離行列にhclustを実行して、対応する行列のサブセット、および事前に割り当てられたリスト内の結果オブジェクトを置きます。」

for (grp in ngroup) { 
    mat <- df[df$Group %in% grp, -2] 
    output[[grp]] <- hclust(dist(mat)) 
} 

私はそれは、このデータフレームdf(それが動作しますので、私は2つの余分な人を追加注意してください)で動作チェックしました:あなたはグループに[を使用し、個々のクラスタを取得するには

structure(list(Group = c(2L, 4L, 2L, 4L, 3L, 3L, 2L, 3L, 4L), 
X = c(-300L, 200L, -298L, 210L, -700L, -690L, 100L, -680L, 
220L), Y = c(20, 10, 19, 12, 100, 110, 50, 120, 14)), .Names = c("Group", 
"X", "Y"), class = "data.frame", row.names = c("Bob", "Karl", 
"Sara", "Hans", "Anna", "Maria", "Lars", "Person1", "Person2")) 

たとえば、output[2]とします。 ,$order$labelsから値を抽出すると便利です。$height$order$labelsから値を抽出します。 (SOを検索することで簡単にこれを行う方法を見つけることができます)また、異常値を判断するための基準を考える必要があります。

+0

私はライン変更しなければならなかった:マット< - NULL、今私はこの問題を持っている - < マット$グループdfを - それは<マットのグループ列をドロップしませんでしたので、DF [%のGRPで$グループ%DF、-2]を:エラー:サイズ27.8 Gbのベクトルを割り当てることができません – JonaH

+0

データを小さな塊に分割する必要があるかもしれません。私は本当に完全なデータを見ることなく言うことができません。 – Joe

+0

私は小さい塊を管理する方法を考えましたが、この行は以下の通りです:mat < - df [df $ Group%%grp、-2]は動作せず、なぜ私はいつも得られるのかわかりません:> show ) [1] -2別の式df [df $ Group%in%grp、-2]を使用できますか?あなたのDFで完璧に動作します – JonaH

関連する問題