首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将基因组区域转换为R数据帧或GenomicRanges对象中的基因组位置

将基因组区域转换为R数据帧或GenomicRanges对象中的基因组位置
EN

Stack Overflow用户
提问于 2020-03-23 19:11:16
回答 1查看 26关注 0票数 0

我有一个数据帧,其中包含一些基因组间隔及其在几个样本中的相应覆盖率:

代码语言:javascript
复制
       sample1   sample2   sample3
1:1-3    30        NA         NA
1:1-4    NA        40         35
1:4-5    35        NA         NA
1:5-7    NA        50         50
1:6-7    60        NA         NA 

我想要获得相同的数据框架,但对于基因组位置:

代码语言:javascript
复制
       sample1    sample2     sample3
1:1      30         40          35
1:2      30         40          35
1:3      30         40          35
1:4      35         40          35
1:5      35         50          50
1:6      60         50          50
1:7      60         50          50

你知道我怎么才能得到这个吗?(我也尝试过在GenomicRanges对象中转换数据帧,但我仍然不知道该怎么做)

EN

回答 1

Stack Overflow用户

发布于 2020-03-23 20:54:41

我读入的你的数据:

代码语言:javascript
复制
tab = structure(list(sample1 = c(30L, NA, 35L, NA, 60L), sample2 = c(NA, 
40L, NA, 50L, NA), sample3 = c(NA, 35L, NA, 50L, NA)), class = "data.frame", row.names = c("1:1-3", 
"1:1-4", "1:4-5", "1:5-7", "1:6-7"))

这取决于你的数据集有多大,所以这是一个基于GenomicRange的解决方案:

代码语言:javascript
复制
library(GenomicRanges)
gr = GRanges(rownames(tab))
seq_range = range(gr)
W = width(seq_range)

COV = lapply(tab,function(i){
  i[is.na(i)] = 0
  coverage(gr,weight=i,width=W)
})

cov_samples = sapply(COV,function(i)as.matrix(i[seq_range]))
cov_samples
         sample1 sample2 sample3
[1,]      30      40      35
[2,]      30      40      35
[3,]      30      40      35
[4,]      35      40      35
[5,]      35      50      50
[6,]      60      50      50
[7,]      60      50      50

现在我们把它和坐标结合起来:

代码语言:javascript
复制
final = data.frame(
seqnames=rep(as.character(seqnames(seq_range)),W),
pos =  unlist(lapply(W,seq,from=1)),
cov_samples)

  seqnames pos sample1 sample2 sample3
1        1   1      30      40      35
2        1   2      30      40      35
3        1   3      30      40      35
4        1   4      35      40      35
5        1   5      35      50      50
6        1   6      60      50      50
7        1   7      60      50      50
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60812421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档