3

このデータセットを取得...

test <- data.frame(
    t1=c(2,3,5,6,7,10,10),
    t2=c(3,4,6,7,8,11,12),
    id=1:7
)

...これはこのように見えます。明確にするために、各行は、一緒にバインドされたままでなければならない2つのケースの以前に識別されたリンクです。

  t1 t2 id
1  2  3  1
2  3  4  2
3  5  6  3
4  6  7  4
5  7  8  5
6 10 11  6
7 10 12  7

リンクが次のようになるように、t2==t1に基づいて連続シーケンスを再帰的に識別したいと考えています。

link1 -  2-3,3-4
link2 -  5-6,6-7,7-8
link3 -  10-11
link4 -  10-12

私が探している最終結果はこれです:

  t1 t2 id matchid
1  2  3  1       1
2  3  4  2       1
3  5  6  3       2
4  6  7  4       2
5  7  8  5       2
6 10 11  6       3
7 10 12  7       4

私は最初のリンクを取得するために実験しmatch(test$t2,test$t1)ましたが、現在、リンクプロセスを続行する方法に行き詰まっています。私の考えはループを使用することに戻り続けています、そしてそれは行くためのひどい方法のように聞こえます。

4

1 に答える 1

6

これを行う1つの方法は次のとおりです。

test$matchid <- c(1, 1 + cumsum(tail(test$t1, -1) != head(test$t2, -1)))
于 2012-05-22T03:28:32.260 に答える