pythonic相当于R GRanges中的reduce() - 如何折叠范围数据?

标签 python r bioinformatics genomicranges pyranges

在 R 中(尽管冗长):

这是一个测试数据框

df <- data.frame(
  "CHR" = c(1,1,1,2,2),
  "START" = c(100, 200, 300, 100, 400),
  "STOP" = c(150,350,400,500,450)
  )

首先我创建 GRanges 对象:

gr <- GenomicRanges::GRanges(
  seqnames = df$CHR,
  ranges = IRanges(start = df$START, end = df$STOP)
  )

然后我减少折叠成新田庄对象的间隔:

reduced <- reduce(gr)

现在将一个新列附加到原始数据帧,以确认哪些行属于同一连续“ block ”。

subjectHits(findOverlaps(gr, reduced))

输出:

> df
  CHR START STOP locus
1   1   100  150     1
2   1   200  350     2
3   1   300  400     2
4   2   100  500     3
5   2   400  450     3

如何在 Python 中执行此操作?我知道 pybedtools,但据我所知,这需要我将 data.frame 保存到磁盘。任何帮助表示赞赏。

最佳答案

https://github.com/biocore-ntnu/pyranges

import pyranges as pr
chromosomes = [1] * 3 + [2] * 2
starts = [100, 200, 300, 100, 400]
ends = [150, 350, 400, 500, 450]
gr = pr.PyRanges(chromosomes=chromosomes, starts=starts, ends=ends)
gr.cluster()
# +--------------+-----------+-----------+-----------+
# |   Chromosome |     Start |       End |   Cluster |
# |       (int8) |   (int32) |   (int32) |   (int64) |
# |--------------+-----------+-----------+-----------|
# |            1 |       100 |       150 |         1 |
# |            1 |       200 |       350 |         2 |
# |            1 |       300 |       400 |         2 |
# |            2 |       100 |       500 |         3 |
# |            2 |       400 |       450 |         3 |
# +--------------+-----------+-----------+-----------+

它将在 0.0.21 中发布。感谢您的想法!

关于pythonic相当于R GRanges中的reduce() - 如何折叠范围数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49118347/

相关文章:

r - 优化网络邻接矩阵创建功能

python - 生成范围 (i, j) 之间的核苷酸 k-mers 的所有组合

linux - 如何根据片段长度对床文件进行子集化?

python - 这可以变得更 pythonic 吗?

python - 如何在Qt样式表中设置相对路径?

python - 无法在 centos 6 上安装 cairosvg

r - geom_bar 从 ggplot 绘制 df 长度的字符变量

Python - 导入模块获取全局变量

r - 定义由gganimate创建的.gif的大小-更改尺寸/分辨率

r - 有关如何使用 for 循环比较列和向量输入的建议