查找具有相同值的所有连续行

时间:2015-11-13 13:05:25

标签: r

我有大量的基因组数据如下:

chr   leftPos  Def
1      23444     1
1      63226    -1
1      125325   -1
2      12       -1
3      5435     -1
3      5675      0
3      67868     0
3      78999     0
4      3465      1
5      67868     1
5      78979     1
5      80988    -1

对于每个$ chr,我想得到所有行,其中上面的行在$ Def中与下面的行在一个单独的数据帧中具有相同的条目,保留匹配的两行。 $ Def中的条目可以是-1,0或1,但我对0不感兴趣。

我对于在$ chr的最后和开头发生的事情并不感到困扰,因此可以忽略。

我想这将在某种情况下完成,但我不知道如何。

输出应该类似于:

chr    leftPos    Def
1      63226    -1
1      125325   -1
5      67868     1
5      78979     1

感谢。我不知道如何处理这个问题。

1 个答案:

答案 0 :(得分:2)

我们可以使用rleid中的data.table。转换' data.frame'到' data.table' (setDT(df2)),创建一个' ind'基于游程长度类型id的列。由' chr'分组和' ind'为'创建一个逻辑条件,if nrow大于1,我们Subset the Data.table(.SD),并分配' ind'到' NULL'。

library(data.table)#v1.9.6+
setDT(df1)[, ind:= rleid(Def)][!is.na(Def)&Def!=0, if(.N>1) .SD, .(chr, ind)]
#   chr leftPos Def
#1:   1   63226  -1
#2:   1  125325  -1
#3:   5   67868   1
#4:   5   78979   1