Poi*_*ien 1 r dplyr data.table
您有什么方法可以通过存储在字符中的查询来过滤data.table吗?对于.恩.
m <- structure(list(Hugo_Symbol = c("ABCA10", "ABCA4", "ABCC3", "ABCG4",
"ACTBL2", "ADAMTS12", "ADCY5", "ADSS", "AGXT2", "ANG"), Variant_Classification = c("Splice_Site",
"Missense_Mutation", "Missense_Mutation", "Missense_Mutation",
"Missense_Mutation", "Missense_Mutation", "Missense_Mutation",
"Splice_Site", "Missense_Mutation", "Missense_Mutation"), Variant_Type = c("SNP",
"SNP", "SNP", "SNP", "SNP", "SNP", "SNP", "SNP", "SNP", "SNP"
), Tumor_Sample_Barcode = c("TCGA.AB.2988", "TCGA.AB.2869", "TCGA.AB.2887",
"TCGA.AB.2934", "TCGA.AB.2931", "TCGA.AB.2945", "TCGA.AB.2833",
"TCGA.AB.2912", "TCGA.AB.2822", "TCGA.AB.2988")), .Names = c("Hugo_Symbol",
"Variant_Classification", "Variant_Type", "Tumor_Sample_Barcode"
), row.names = c(NA, -10L), class = c("data.table", "data.frame"
))
Run Code Online (Sandbox Code Playgroud)
过滤
#These work fine
m[Variant_Classification %in% 'Splice_Site']
dplyr::filter(.data = m, filter = Variant_Classification %in% 'Splice_Site')
Run Code Online (Sandbox Code Playgroud)
现在如果查询存储在字符变量中该怎么办.
query <- "Variant_Classification %in% 'Splice_Site'"
#These don't work
dplyr::filter(.data = m, filter = query)
m[,query, with =F]
Run Code Online (Sandbox Code Playgroud)
有没有办法这样做?
谢谢.
你可以这样做:
m[eval(parse(text=query))]
# Hugo_Symbol Variant_Classification Variant_Type Tumor_Sample_Barcode
#1: ABCA10 Splice_Site SNP TCGA.AB.2988
#2: ADSS Splice_Site SNP TCGA.AB.2912
Run Code Online (Sandbox Code Playgroud)
解决方案dplyr应该是等效的:
dplyr::filter(.data = m, filter = eval(parse(text=query)))
Run Code Online (Sandbox Code Playgroud)