R - 连续情况的序列,其中end1 == start2

the*_*ail 3 r sequence match dataframe

拿这个数据集......

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

......看起来像这样.为了澄清,每一行都是先前确定的两个必须保持绑定在一起的案例的链接.

  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
Run Code Online (Sandbox Code Playgroud)

我希望递归地识别基于t2 == t1的连续序列,以便链接是:

link1 -  2-3,3-4
link2 -  5-6,6-7,7-8
link3 -  10-11
link4 -  10-12
Run Code Online (Sandbox Code Playgroud)

我正在寻找的最终结果是:

  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
Run Code Online (Sandbox Code Playgroud)

我已经尝试过match(test$t2,test$t1)获取初始链接,但现在我不知道如何继续链接过程.我的想法继续回到使用循环,这听起来像一个可怕的方式去.

flo*_*del 6

这是一种方法:

test$matchid <- c(1, 1 + cumsum(tail(test$t1, -1) != head(test$t2, -1)))
Run Code Online (Sandbox Code Playgroud)

  • 呵呵,一步一步.我建议你开始输入`tail(test $ t1,-1)`来查看它返回的内容,然后`head(test $ t2,-1)`,然后将它们与`!=`等进行比较.你会看到它并不难. (2认同)