Как удалить значения столбца, не совпадающие с grepl, в R - PullRequest
1 голос
/ 09 июля 2020

У меня есть фрейм данных mydf. Я хочу посмотреть на наличие значений c.change в Clinvar_Type. Если присутствует, я хочу удалить все в grepl("Clinvar, colnames(mydf)).

Это мои данные:

mydf <- structure(c("chr1:8045045:A:G", "chr1:8045045:A:G", "chr1:8045045:A:G", 
"chr1:17314702:C:T", "chr1:17314702:C:T", "chr1:17314702:C:T", 
"c.501A>G", "c.441A>G", "c.414A>G", "c.2775G>A", "c.2658G>A", 
"c.2790G>A", "NM_007262.5(PARK7):c.501A>G (p.Ala167=)", "NM_007262.5(PARK7):c.501A>G (p.Ala167=)", 
"NM_007262.5(PARK7):c.501A>G (p.Ala167=)", "NM_022089.4(ATP13A2):c.2790G>A (p.Ser930=)", 
"NM_022089.4(ATP13A2):c.2790G>A (p.Ser930=)", "NM_022089.4(ATP13A2):c.2790G>A (p.Ser930=)", 
"single nucleotide variant", "single nucleotide variant", "single nucleotide variant", 
"single nucleotide variant", "single nucleotide variant", "single nucleotide variant", 
"HGNC:16369", "HGNC:16369", "HGNC:16369", "HGNC:30213", "HGNC:30213", 
"HGNC:30213"), .Dim = 6:5, .Dimnames = list(NULL, c("VarID_build37", 
"c.change", "Clinvar_ Name", "Clinvar_ Type", "Clinvar_ HGNC_ID"
)))

Результат, который я хочу:

    VarID_build37       c.change    Clinvar_ Name                                Clinvar_ Type               Clinvar_ HGNC_ID
 "chr1:8045045:A:G"  "c.501A>G"  "NM_007262.5(PARK7):c.501A>G (p.Ala167=)"    "single nucleotide variant" "HGNC:16369"    
"chr1:8045045:A:G"  "c.441A>G"     
"chr1:8045045:A:G"  "c.414A>G"     
"chr1:17314702:C:T" "c.2775G>A" 
"chr1:17314702:C:T" "c.2658G>A" 
"chr1:17314702:C:T" "c.2790G>A" "NM_022089.4(ATP13A2):c.2790G>A (p.Ser930=)" "single nucleotide variant" "HGNC:30213"  

Ответы [ 2 ]

3 голосов
/ 09 июля 2020

Вот базовое решение R. (вы можете заменить "" на NA, если хотите).

mydf[,-(1:2)][!apply(mydf,1,function(x) grepl(x["c.change"], x["Clinvar_ Name"])),] <- ""

    VarID_build37       c.change    Clinvar_ Name                                Clinvar_ Type               Clinvar_ HGNC_ID
[1,] "chr1:8045045:A:G"  "c.501A>G"  "NM_007262.5(PARK7):c.501A>G (p.Ala167=)"    "single nucleotide variant" "HGNC:16369"    
[2,] "chr1:8045045:A:G"  "c.441A>G"  ""                                           ""                          ""              
[3,] "chr1:8045045:A:G"  "c.414A>G"  ""                                           ""                          ""              
[4,] "chr1:17314702:C:T" "c.2775G>A" ""                                           ""                          ""              
[5,] "chr1:17314702:C:T" "c.2658G>A" ""                                           ""                          ""              
[6,] "chr1:17314702:C:T" "c.2790G>A" "NM_022089.4(ATP13A2):c.2790G>A (p.Ser930=)" "single nucleotide variant" "HGNC:30213" 
0 голосов
/ 09 июля 2020

Вот еще одно решение Base R, использующее mapply() с grepl():

idx <- mapply(function(x, y) !grepl(x, y, fixed = TRUE), mydf[, "c.change"], mydf[, "Clinvar_ Name"])

Или вы можете использовать stringi::stri_detect_fixed(), потому что оно векторизовано по строке и шаблону:

idx2 <- stringi::stri_detect_fixed(mydf[, "Clinvar_ Name"], mydf[, "c.change"], negate = TRUE)

identical(unname(idx), idx2)
[1] TRUE

В любом случае используйте индекс, выберите столбцы и присвойте им NA. Также имейте в виду, что пустая строка символов "" отличается от пропущенного значения NA в R. Надеюсь, это поможет!

mydf[idx, 3:5] <- NA

mydf
     VarID_build37       c.change    Clinvar_ Name                                Clinvar_ Type               Clinvar_ HGNC_ID
[1,] "chr1:8045045:A:G"  "c.501A>G"  "NM_007262.5(PARK7):c.501A>G (p.Ala167=)"    "single nucleotide variant" "HGNC:16369"    
[2,] "chr1:8045045:A:G"  "c.441A>G"  NA                                           NA                          NA              
[3,] "chr1:8045045:A:G"  "c.414A>G"  NA                                           NA                          NA              
[4,] "chr1:17314702:C:T" "c.2775G>A" NA                                           NA                          NA              
[5,] "chr1:17314702:C:T" "c.2658G>A" NA                                           NA                          NA              
[6,] "chr1:17314702:C:T" "c.2790G>A" "NM_022089.4(ATP13A2):c.2790G>A (p.Ser930=)" "single nucleotide variant" "HGNC:30213"    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...