我试图从染色体/位置数据框中提取区域,该区域对应于描绘组蛋白位置的相关染色体位置列表。我目前的管道":
> mapinfo<- read.table()
> colnames(mapinfo)<-c("CHR","M")
> mapinfo$CHR<- paste("chr",mapinfo$CHR),sep="")
> head(mapinfo)
CHR M
1 chrX 24072640
2 chr9 131463936
3 chr14 105176736
4 chr13 115000168
5 chr8 74791285
6 chr19 3676340
> bed<-read.table()
> names(bed)<- c("Chr","Start","Stop")
> head(bed)
Chr Start Stop
1 chr4 76806896 76807598
2 chrY 10034763 10036639
3 chr2 133036421 133037716
4 chr21 27227897 27228500
5 chr1 145036931 145041607
6 chr2 91777964 91779762
> Mcodes<- by(bed,bed$Chr,function(x){paste("M>=",bed$Start,"&M<=",bed$Stop,sep="",collapse="|")})
> Mcodes[chr1]
chr1
"M>=130786932&M<=130787255|M>=133156512&M<=133156894..."
> subs<- split(mapinfo,mapinfo$CHR)
此时我可以使用以下行,以便通过染色体单独对所需区域进行子集化:
> CHR1<- eval(parse(text=paste0('subset(subs$chr1,',Mcodes["chr1"],')')))
我想将&#34; subs&#34;中包含的所有染色体特定数据框子集。通过他们的染色体特定对应列表在&#34; Mcodes&#34;无需在24个不同时间运行最后一行代码(因为我有多个床文件用于各种组蛋白/组蛋白变体,最终需要通过相同的管道)。有没有办法循环/应用/使某些事情成为可能?
对不起,如果这似乎是一个微不足道的问题 - 我仍然是R /编程游戏的新手。 谢谢你的任何建议。
答案 0 :(得分:1)
这是一个玩具示例,如果我理解正确的话,应该有所帮助:
这是一个玩具mapinfo
:
mapinfo <- data.frame(
CHR = paste0("chr", rep(1:3, each = 3)),
M = c(1, 10, 100)
)
mapinfo
#> CHR M
#> 1 chr1 1
#> 2 chr1 10
#> 3 chr1 100
#> 4 chr2 1
#> 5 chr2 10
#> 6 chr2 100
#> 7 chr3 1
#> 8 chr3 10
#> 9 chr3 100
玩具bed
:
bed <- data.frame(
CHR = paste0("chr", rep(1:3, each = 2)),
Start = c(0, 5, 15),
Stop = c(5, 15, 120)
)
bed
#> CHR Start Stop
#> 1 chr1 0 5
#> 2 chr1 5 15
#> 3 chr2 15 120
#> 4 chr2 0 5
#> 5 chr3 5 15
#> 6 chr3 15 120
然后,如果您还没有,请安装软件包dplyr
和purrr
(使用install.packages(c("dplyr", "purrr"))
,然后运行以下内容:
library(dplyr)
library(purrr)
mapinfo %>%
left_join(bed) %>%
filter(pmap_lgl(list(M, Start, Stop), between))
#> CHR M Start Stop
#> 1 chr1 1 0 5
#> 2 chr1 10 5 15
#> 3 chr2 1 0 5
#> 4 chr2 100 15 120
#> 5 chr3 10 5 15
#> 6 chr3 100 15 120
这是mapinfo
中所有元素的数据框,介于Start
中指定的Stop
和bed
值之间。此时,您可以根据需要将其拆分,删除Start
和Stop
列等。
重要提示:CHR
必须在两个数据框中具有完全相同的标签(例如,所有大写字母)。我注意到你在一个帽子中只有一个,而在另一个帽子里只有一个字母的帽子。在这里保持一致(a)使这个代码有效,(b)因为一致性使你的代码更容易消化。
为了帮助您提高对代码的理解,以下是与数据科学相关的一些相关链接&#34;作者:Garrett Grolemund和Hadley Wickham: