2016-04-08 21 views
1

Merhaba, karakter olarak saklanan bir sorgu ile data.table filtreleyebileceğim herhangi bir yol var mı? İçin. ex.filter data.table ile bir sorgu dizesi

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" 
)) 

Filtreleme

#These work fine 
m[Variant_Classification %in% 'Splice_Site'] 
dplyr::filter(.data = m, filter = Variant_Classification %in% 'Splice_Site') 

Şimdi sorgu karakter değişkeninde saklanan ne olursa.

query <- "Variant_Classification %in% 'Splice_Site'" 
#These don't work 
dplyr::filter(.data = m, filter = query) 
m[,query, with =F] 

Bunu yapmanın bir yolu var mı?

Teşekkürler.

+0

'm [, sorgu, F = ile]' yanlıştır. Seçimin ilk argümanı olduğunu düşünün. [.data.table' – jogo

+0

Sorgunuzu manuel olarak giriyorsanız, belki de 'query = ifade (Variant_Classification% '%' Splice_Site ')' seçeneğini kullanın, sonra sadece Eval (sorgu)] '. Yine de, neden bir biçiminde bir sorgu dizesiyle niçin/nasıl sonuçlandığınıza emin değilim. – Frank

cevap

6

Sen ile yapabilirsiniz:

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 

dplyr için çözüm eşdeğer olmalıdır:

dplyr::filter(.data = m, filter = eval(parse(text=query))) 
+0

Sorgumda bir alıntı varsa, metin nasıl ayrıştırılır? bunun gibi "' Variant_Classification% '%' 5'UTR'' " – PoisonAlien

+0

DÜZENLEME: Anladım" Variant_ Sınıflandırma% 'si%' 5 \\ 'UTR' "' – PoisonAlien