使用 %in% 根据染色体和位置过滤行
Using %in% to filter rows based on Chromosome AND Position
我有两个数据帧:一个是带有基因型信息的 VCF,另一个是 "special" 个 SNP 位置的数据帧。 使用 dplyr,我想仅针对特殊 SNP 数据框中存在的那些位置过滤 VCF,但是,我不知道如何使用 %in% 进行多个列。
VCF 数据帧:
CHR POS REF ALT
01 10 C T
01 20 G A
01 30 T C
02 20 A G
02 30 C G
02 40 G T
02 50 T A
SPECIAL_SNP 数据框:
CHR POS
01 20
01 30
02 40
02 50
期望的输出:
CHR POS REF ALT
01 20 G A
01 30 T C
02 40 G T
02 50 T A
我在想类似的事情:
VCF %>%
filter(.[, c("CHR", "POS"] %in% SPECIAL_SNP[, c("CHR", "POS")])
在此先感谢您的帮助。
我们可以使用inner_join
library(dplyr)
inner_join(VCF, SPECIAL_SNP)
# CHR POS REF ALT
#1 1 20 G A
#2 1 30 T C
#3 2 40 G T
#4 2 50 T A
或者另一种选择是%in%
VCF[do.call(paste, VCF[1:2]) %in% do.call(paste, SPECIAL_SNP[1:2]),]
数据
VCF <- structure(list(CHR = c(1L, 1L, 1L, 2L, 2L, 2L, 2L), POS = c(10L,
20L, 30L, 20L, 30L, 40L, 50L), REF = c("C", "G", "T", "A", "C",
"G", "T"), ALT = c("T", "A", "C", "G", "G", "T", "A")),
class = "data.frame", row.names = c(NA,
-7L))
SPECIAL_SNP <- structure(list(CHR = c(1L, 1L, 2L, 2L), POS = c(20L, 30L, 40L,
50L)), class = "data.frame", row.names = c(NA, -4L))
我有两个数据帧:一个是带有基因型信息的 VCF,另一个是 "special" 个 SNP 位置的数据帧。 使用 dplyr,我想仅针对特殊 SNP 数据框中存在的那些位置过滤 VCF,但是,我不知道如何使用 %in% 进行多个列。
VCF 数据帧:
CHR POS REF ALT
01 10 C T
01 20 G A
01 30 T C
02 20 A G
02 30 C G
02 40 G T
02 50 T A
SPECIAL_SNP 数据框:
CHR POS
01 20
01 30
02 40
02 50
期望的输出:
CHR POS REF ALT
01 20 G A
01 30 T C
02 40 G T
02 50 T A
我在想类似的事情:
VCF %>%
filter(.[, c("CHR", "POS"] %in% SPECIAL_SNP[, c("CHR", "POS")])
在此先感谢您的帮助。
我们可以使用inner_join
library(dplyr)
inner_join(VCF, SPECIAL_SNP)
# CHR POS REF ALT
#1 1 20 G A
#2 1 30 T C
#3 2 40 G T
#4 2 50 T A
或者另一种选择是%in%
VCF[do.call(paste, VCF[1:2]) %in% do.call(paste, SPECIAL_SNP[1:2]),]
数据
VCF <- structure(list(CHR = c(1L, 1L, 1L, 2L, 2L, 2L, 2L), POS = c(10L,
20L, 30L, 20L, 30L, 40L, 50L), REF = c("C", "G", "T", "A", "C",
"G", "T"), ALT = c("T", "A", "C", "G", "G", "T", "A")),
class = "data.frame", row.names = c(NA,
-7L))
SPECIAL_SNP <- structure(list(CHR = c(1L, 1L, 2L, 2L), POS = c(20L, 30L, 40L,
50L)), class = "data.frame", row.names = c(NA, -4L))