2012-02-02 2 views
1

"markr"変数があり、corr変数に "markr"の後続メンバー間の相関があります。隣接関係を使用した順序付き要素のグループ化変数R

markrのメンバーの順序を変更することなく、corrに基づいてmarkrをグループ化する必要があります。

enter image description here

0.95より大きいCORRを有していて惨めなmarkrの個々のメンバーが1つのグループになります。グループは、より良い図を以下により説明することができます。 corrが0.95未満に低下したときの最初の値から開始し、2番目のグループが開始し、corrが0.95未満に再び低下するまで処理が続行され、プロセスはデータの最後まで続きます。グループ変数は、グループ内の最初と最後のメンバー、たとえば-A-g、A1-f、gg-kによって命名されます。

期待される出力はです。

markr <- c("A", "B", "C", "D", "E", "g", 
      "A1", "B1", "cc", "dd", "f", 
      "gg", "h", "K") 
group <- c("A-g", "A-g", "A-g", "A-g","A-g", "A-g", 
      "A1-f", "A1-f", "A1-f", "A1-f","A1-f", 
      "gg-k", "gg-k", "gg-k") 
dataf <- data.frame (markr, group) 

dataf 

markr group 
1  A A-g 
2  B A-g 
3  C A-g 
4  D A-g 
5  E A-g 
6  g A-g 
7  A1 A1-f 
8  B1 A1-f 
9  cc A1-f 
10 dd A1-f 
11  f A1-f 
12 gg gg-k 
13  h gg-k 
14  K gg-k 

私はこのようなデータセットを非常に大きくしているので、どのようにこのプロセスを自動化できますか?あなたがグループごとに、片に切断を1つずつdata.frameをddply使用することができ、グループ名について

d1 <- data.frame(
    marker = markr, 
    group = cumsum(c(1, corr < .95)) 
) 

+0

:http://stackoverflow.com/questions/8936164/incrementing-an-id-number-each-time-a-condition-is-met –

答えて

1

グループの数は、我々がこれまで見てきた0.95の下の値の数です最初の要素と最後の要素を抽出するのは簡単です。関連

library(plyr) 
d2 <- ddply( 
    d1, "group", summarize, 
    group_name=paste(head(marker,1), tail(marker,1), sep="-") 
) 
d <- merge(d1, d2, by="group") 
+0

迅速な対応ありがとうございました、それが動作します。私は非常に大きなデータセットを持っているので、グループ名をプログラムする方法はありますか? – SHRram

+0

@RamSharma:私は自分の答えを更新してグループの名前を追加しました。 –