将细胞带信息从一个data.frame分配到另一个data.frame的基因组位置

时间:2012-12-13 12:19:36

标签: r dataframe

我有两个data.frames(cytobandwindows)。因此,我想从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信息。

非常感谢你的帮助!!!

大卫

1 个答案:

答案 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

使用该信息匹配并复制“Cytoband”值从“cytoband”到“windows”

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