R 选择表示两个位置之间范围的行,以便仅包括至少包含另一个表的一个位置的间隔
仅当间隔(开始/结束)至少包含“地图”表格的一个“位置”(开始)时,我需要保存“参考”中的行: 参考“ref”表的示例:R 选择表示两个位置之间范围的行,以便仅包括至少包含另一个表的一个位置的间隔,r,merge,set,data.table,R,Merge,Set,Data.table,仅当间隔(开始/结束)至少包含“地图”表格的一个“位置”(开始)时,我需要保存“参考”中的行: 参考“ref”表的示例: ref 更详细的: rows_to_keep <- ref$start %in% map$start | ref$end %in% map$start rows_to_keep # [1] TRUE TRUE FALSE TRUE ref[rows_to_keep, ] # chr start end # 1 chr1 1 2 # 2 chr2
ref
更详细的:
rows_to_keep <- ref$start %in% map$start | ref$end %in% map$start
rows_to_keep
# [1] TRUE TRUE FALSE TRUE
ref[rows_to_keep, ]
# chr start end
# 1 chr1 1 2
# 2 chr2 2 10
# 4 chr2 6 10
根据本主题保留行
""
“一般来说,使用bioconductor package IRanges来处理与间隔相关的问题是非常合适的”
给你:
library("GenomicRanges")
library("data.table")
gr1 = with(ref, GRanges(Rle(factor(chr,
levels=c("chr1", "chr2"))), IRanges(start, end)))
gr2 = with(map, GRanges(Rle(factor(chr,
levels=c("chr1", "chr2"))), IRanges(start, start)))
olaps<-subsetByOverlaps(gr1, gr2)
olaps <- as.data.frame(olaps)
col_headings <- c('chr','start', 'end', 'width', 'strand')
names(olaps) <- col_headings
final <- subset(olaps, select = c("chr", "start", "end"))
> final
chr start end
1 chr1 1 10
2 chr1 30 40
3 chr2 80 90
库(“基因组范围”)
库(“数据表”)
gr1=带(参考,格兰杰(Rle)系数(chr,
级别=c(“chr1”、“chr2”)),伊朗(开始、结束)
gr2=带(地图、格兰杰(Rle)系数(chr、,
级别=c(“chr1”、“chr2”)),伊朗(开始,开始)
olapsI知道这个例子中的结果是一样的,但是这个命令没有考虑chr(染色体编号)…而且,看起来这没有得到映射表之间的间隔。仅当map(开始)中包含的某些值在“ref”(开始-结束)范围内时)@Fpertille这两条评论都是正确的;但是,从给定的示例来看,这些要求并不明显。在这一点上,我建议发布一个新的问题和示例数据集来说明这些细节。我必须感谢您的好答案,并对坏示例表示抱歉,但我提出的问题是:仅当间隔(开始/结束)包含(在)“map”表的至少一个“position”(开始)时,我才需要保存“ref”中的行。根据StackOverflow规则,我不应该做多余的新问题。@Fpertille您能更具体一点,编辑您的问题吗?给出一些应该“通过”逻辑的事情和应该“失败”的事情的例子——这听起来与其他一些帖子类似:
final<-"chr start end
chr1 1 10
chr1 30 40
chr2 80 90"
final<-read.table(text=final,header=T)
ref$tag <- paste0(ref$chr, "-", ref$start)
ref$tag1 <- paste0(ref$chr, "-", ref$end)
map$tag <- paste0(map$chr, "-", map$start)
ref[ref$start %in% map$start | ref$end %in% map$start, ]
rows_to_keep <- ref$start %in% map$start | ref$end %in% map$start
rows_to_keep
# [1] TRUE TRUE FALSE TRUE
ref[rows_to_keep, ]
# chr start end
# 1 chr1 1 2
# 2 chr2 2 10
# 4 chr2 6 10
library("GenomicRanges")
library("data.table")
gr1 = with(ref, GRanges(Rle(factor(chr,
levels=c("chr1", "chr2"))), IRanges(start, end)))
gr2 = with(map, GRanges(Rle(factor(chr,
levels=c("chr1", "chr2"))), IRanges(start, start)))
olaps<-subsetByOverlaps(gr1, gr2)
olaps <- as.data.frame(olaps)
col_headings <- c('chr','start', 'end', 'width', 'strand')
names(olaps) <- col_headings
final <- subset(olaps, select = c("chr", "start", "end"))
> final
chr start end
1 chr1 1 10
2 chr1 30 40
3 chr2 80 90