使用R基于另一个数据集选择数据
我有一个大型数据集(d1),如下所示:使用R基于另一个数据集选择数据,r,R,我有一个大型数据集(d1),如下所示: SNP Position Chromosome rs1 10010 1 rs2 10020 1 rs3 10030 1 rs4 10040 1 rs5 10010 2 rs6 10020 2 rs7 10030 2 rs8 10040 2 rs9 10010 3 rs10 10020 3 rs11 10030 3 rs12 10040 3 我还有一个数据集(d2),如下所示: SNP Position
SNP Position Chromosome
rs1 10010 1
rs2 10020 1
rs3 10030 1
rs4 10040 1
rs5 10010 2
rs6 10020 2
rs7 10030 2
rs8 10040 2
rs9 10010 3
rs10 10020 3
rs11 10030 3
rs12 10040 3
我还有一个数据集(d2),如下所示:
SNP Position Chromosome
rsA 10015 1
rsB 10035 3
现在,我想根据d2(位置+-5和相同的染色体)选择d1中的一系列SNP,并将结果写入txt文件,结果如下:
SNP(d2) SNP(d1) Position(d1) Chromosome
rsA rs2 10020 1
rsA rs3 10030 1
rsB rs11 10030 3
rsB rs12 10040 3
我是R的新手,谁能告诉我在R怎么做?非常感谢您的回复。通过“染色体”列进行合并(就像在该列上连接数据库中的两个表):
d2$low <- d2$Position-5 ; d2$high<- d2$Position+5
mrg按“染色体”列进行合并(如在该列上连接数据库中的两个表):
mrg的人可能会否决你的问题,直到你向我们展示你的尝试,或者至少提供一个可复制的例子(见此处:)人们可能会否决你的问题,直到你向我们展示你的尝试,或者至少提供一个可复制的例子(见此处:)Manji,非常感谢你的回答…Manji,非常感谢你的回复…嗨,德温,这真的帮助了我。。。非常感谢你的帮助…嗨,德温,这真的帮助了我。。。非常感谢你的帮助。。。
d2$matched <- which(d1$Position >=d2$low & d2$high >= d1$Position)
d1$matched <- apply(d1, 1, function(p)
which(p['Position'] >=d2[,'low'] &
d2[,'high'] >= p['Position'] &
p['Chromosome']==d2[,"Chromosome"]) )
d1 # take a look
# Then bind matching cases together
cbind( d1[ which(d1$matched > 0), ],
d2[ unlist(d1$matched[which(d1$matched>0)]), ] )
#--------------------
SNP Position Chromosome matched SNP Position Chromosome low high
1 rs1 10010 1 1 rsA 10015 1 10010 10020
2 rs2 10020 1 1 rsA 10015 1 10010 10020
11 rs11 10030 3 2 rsB 10035 3 10030 10040
12 rs12 10040 3 2 rsB 10035 3 10030 10040
mrg <- merge(x = d1, y = d2, by = c("Chromosome"), all.y = TRUE)
result <- mrg[abs(mrg$Position.x - mrg$Position.y) <= 5,]