我有两个data.frames(cytoband
和windows
)。因此,我想从maploc
data.frame中找到windows
数据框中相应cytoband
的{{1}}列的每个值(见下文)。< / p>
cytoband
理想情况下,R应为每个head(windows)
chrom maploc X4_TU_9 CNV
chr1_1 chr1 291587 0.055690883 0
chr1_2 chr1 640937 0.039105630 0
chr1_3x chr1 792810 -0.009465735 0
chr1_14xxxxx chr1 924029 -0.033792175 0
chr1_25xxx chr1 1035540 -0.010869910 0
chr1_42xxxx chr1 1184607 -0.020095050 0
head(cytoband)
chrom chromStart chromEnd Cytoband G
1 chr1 0 2300000 p36.33 gneg
2 chr1 2300000 5400000 p36.32 gpos25
3 chr1 5400000 7200000 p36.31 gneg
4 chr1 7200000 9200000 p36.23 gpos25
5 chr1 9200000 12700000 p36.22 gneg
6 chr1 12700000 16200000 p36.21 gpos50
值找到相应的染色体和核苷酸间隔(chromStart - chromEnd
),并为其分配匹配的maploc
信息。
非常感谢你的帮助!!!
大卫
答案 0 :(得分:0)
您提供的数据似乎不适合演示您的问题(即使数据正确) - 您的“chromStart” - “chromEnd”范围中的第一行cytoband data.frame
满足窗口data.frame
中的所有“maploc”值。
也就是说,这是一个最小的示例,其中包含一些您应该能够扩展到实际数据的补充数据。
set.seed(1)
windows <- data.frame(
chrom = "chr1",
maploc = sort(floor(runif(10, 500, 5000))),
X4_TU_9 = rnorm(10)
)
cytoband <- data.frame(
chrom = "chr1",
chromStart = seq(0, 6000, 1000),
chromEnd = seq(1000, 7000, 1000),
Cytoband = paste("p36", sample(20:40, 7), sep = ".")
)
head(windows, 3)
# chrom maploc X4_TU_9
# 1 chr1 778 -0.8204684
# 2 chr1 1407 0.4874291
# 3 chr1 1694 0.7383247
head(cytoband, 3)
# chrom chromStart chromEnd Cytoband
# 1 chr1 0 1000 p36.30
# 2 chr1 1000 2000 p36.31
# 3 chr1 2000 3000 p36.29
findInterval
将“maploc”值与“cytoband”data.frame
WhichRange <- findInterval(windows$maploc, c(0, cytoband$chromEnd))
WhichRange
# [1] 1 2 2 3 4 4 4 5 5 5
windows$Cytoband <- cytoband$Cytoband[WhichRange]
# chrom maploc X4_TU_9 Cytoband
# 1 chr1 778 -0.8204684 p36.30
# 2 chr1 1407 0.4874291 p36.31
# 3 chr1 1694 0.7383247 p36.31
# 4 chr1 2174 0.5757814 p36.29
# 5 chr1 3077 -0.3053884 p36.23
# 6 chr1 3331 1.5117812 p36.23
# 7 chr1 3473 0.3898432 p36.23
# 8 chr1 4542 -0.6212406 p36.34
# 9 chr1 4586 -2.2146999 p36.34
# 10 chr1 4751 1.1249309 p36.34