This question already has answers here:
Find point-to-range overlaps
(3个答案)
Finding overlap in ranges with R
(6个答案)
dplyr left_join by less than, greater than condition
(4个答案)
去年关闭。
我有两个数据框:一个带有SNP及其位置的列表,另一个带有基因及其起始和结束坐标的列表。 使用dplyr ,我想在SNP数据框中添加一列,其名称为每个SNP所属的基因的名称(即SNP的位置在同一染色体上,并且位于开始/结束坐标之间(包括该基因)。
如果SNP不在任何基因坐标内,则应在基因列中得到“NA”。 SNP和基因之间的染色体数必须匹配。例如,即使第二个SNP的位置落在Gene4的开始/结束坐标之内,但这也不匹配,因为它们位于不同的染色体上。
SNP数据帧:
GENE数据框:
所需输出:
同样,我想使用dplyr完成此操作。在此先感谢您的帮助!
在基数R中,可以使用
数据
(3个答案)
Finding overlap in ranges with R
(6个答案)
dplyr left_join by less than, greater than condition
(4个答案)
去年关闭。
我有两个数据框:一个带有SNP及其位置的列表,另一个带有基因及其起始和结束坐标的列表。 使用dplyr ,我想在SNP数据框中添加一列,其名称为每个SNP所属的基因的名称(即SNP的位置在同一染色体上,并且位于开始/结束坐标之间(包括该基因)。
如果SNP不在任何基因坐标内,则应在基因列中得到“NA”。 SNP和基因之间的染色体数必须匹配。例如,即使第二个SNP的位置落在Gene4的开始/结束坐标之内,但这也不匹配,因为它们位于不同的染色体上。
SNP数据帧:
CHR POS REF ALT
01 5 C T
01 10 G A
02 5 G T
02 15 C A
02 20 T C
03 10 A G
03 20 C T
GENE数据框:
CHR START END GENE_NAME
01 2 8 Gene1
01 12 20 Gene2
01 25 30 Gene3
02 10 18 Gene4
02 25 35 Gene5
03 5 15 Gene6
所需输出:
CHR POS REF ALT GENE_NAME
01 5 C T Gene1
01 10 G A NA
02 5 G T NA
02 15 C A Gene4
02 20 T C NA
03 10 A G Gene6
03 20 C T NA
同样,我想使用dplyr完成此操作。在此先感谢您的帮助!
最佳答案
使用map2_chr
中的purrr
的一种方法是根据GENE
中的POS
和CHR
过滤SNP
数据帧,然后选择相应的GENE_NAME
。
library(dplyr)
library(purrr)
SNP %>%
mutate(GENE_NAME = map2_chr(POS, CHR, function(x, y) {
inds = x >= GENE$START & x <= GENE$END & y == GENE$CHR
if (any(inds)) GENE$GENE_NAME[which.max(inds)] else NA
}))
# CHR POS REF ALT GENE_NAME
#1 1 5 C T Gene1
#2 1 10 G A <NA>
#3 2 5 G T <NA>
#4 2 15 C A Gene4
#5 2 20 T C <NA>
#6 3 10 A G Gene6
#7 3 20 C T <NA>
在基数R中,可以使用
mapply
编写mapply(function(x, y) {
inds = x >= GENE$START & x <= GENE$END & y == GENE$CHR
if (any(inds)) GENE$GENE_NAME[which.max(inds)] else NA
}, SNP$POS, SNP$CHR)
#[1] "Gene1" NA NA "Gene4" NA "Gene6" NA
数据
SNP <- structure(list(CHR = c(1L, 1L, 2L, 2L, 2L, 3L, 3L), POS = c(5L,
10L, 5L, 15L, 20L, 10L, 20L), REF = c("C", "G", "G", "C", "T",
"A", "C"), ALT = c("T", "A", "T", "A", "C", "G", "T")), class =
"data.frame", row.names = c(NA, -7L))
GENE <- structure(list(CHR = c(1L, 1L, 1L, 2L, 2L, 3L), START = c(2L,
12L, 25L, 10L, 25L, 5L), END = c(8L, 20L, 30L, 18L, 35L, 15L),
GENE_NAME = c("Gene1", "Gene2", "Gene3", "Gene4", "Gene5",
"Gene6")), class = "data.frame", row.names = c(NA, -6L))
关于r - 根据SNP位置和基因开始/结束坐标,从另一个数据框中分配基因名称。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56454072/
10-12 06:04