我有df
喜欢:
SampleID Chr Start End Strand Value
1: rep1 1 11001 12000 - 10
2: rep1 1 15000 20100 - 5
3: rep2 1 11070 12050 - 1
4: rep3 1 14950 20090 + 20
...
我希望加入共享相同chr
和strand
且具有相似起点和终点的行(例如100 +/-距离)。对于执行行连接的那些列,我还想连接SampleID
名称和Value
。使用前面的示例,例如:
SampleID Chr Start End Strand Value
1:rep1,rep2 1 11001 12000 - 10,1
2: rep1 1 15000 20100 - 5
4: rep3 1 14950 20090 + 20
...
想法?谢谢!
编辑:
我找到了R(https://cran.r-project.org/web/packages/fuzzyjoin/index.html)的fuzzyjoin包。有没有人有这个包的经验?
EDIT2:
如果仅将其中一个变量(SampleID
或Value
)连接起来也会很好。
答案 0 :(得分:1)
我们可以按照' Chr'' Strand'进行分组,根据'开始'中的相邻元素之间的差异创建分组ID。并且'结束'在order
开始'结束'之后的列,然后按照' Chr'' Strand'和' ind',获取'开始''结束'的第一个元素,同时paste
' SampleID&#39}中的元素;和'价值'柱
library(data.table)
df[order(Start, End), ind := rleid((Start - shift(Start, fill = Start[1])) < 100 &
(End - shift(End, fill = End[1])) < 100), by =.(Chr, Strand)
][, .(Start = Start[1], End = End[1],
SampleID = toString(SampleID), Value = toString(Value)) , .(Strand, Chr, ind),]
# Strand Chr ind Start End SampleID Value
#1: - 1 1 11001 12000 rep1, rep2 10, 1
#2: - 1 2 15000 20100 rep1 5
#3: + 1 1 14950 20090 rep3 20
注意:假设&#39; df&#39;是data.table