Удаление строк зависит от значений столбцов в других строках R - PullRequest
0 голосов
/ 07 мая 2018

У меня есть следующий фрейм данных с несколькими наблюдениями:


     CHR            END         START          REF         ALT
      1            1445         1446            G           A
      1            1445         1446            A           G
      3            2787         2787            T           -
      3            2787         2787            -           T

И я хочу удалить строки, если столбец REF равен - и ALT соответствует столбцу REF столбец другой строки, а остальные столбцы остаются равными.

В моем примере это желаемый результат:

     CHR            END         START          REF         ALT
      1            1445         1446            G           A
      1            1445         1446            A           G
      3            2787         2787            T           -

Я не уверен, как подключить индекс различных строк

Всегда во фрейме данных удаляемые строки следуют за «материнской» строкой

1 Ответ

0 голосов
/ 07 мая 2018

вы можете попробовать

library(tidyverse)
d %>% 
  unite(tmp, REF, ALT, remove = F) %>% 
  mutate(tmp=strsplit(tmp, "_") %>% map_chr(function(x) paste(sort(x), collapse ="_"))) %>% 
  group_by(CHR, END, START, tmp) %>% 
  mutate(n=ifelse(grepl("-", tmp), 1:n(), 1)) %>% 
  filter(n == 1) %>% 
  ungroup() %>% 
  select(-tmp, -n)
# A tibble: 3 x 5
    CHR   END START REF   ALT  
  <int> <int> <int> <fct> <fct>
1     1  1445  1446 G     A    
2     1  1445  1446 A     G    
3     3  2787  2787 T     - 

Идея состоит в том, чтобы добавить идентификатор tmp с отсортированными значениями ALT, REF, используя подходы strsplit и map. Таким образом, мы можем фильтровать по дубликатам, используя количество похожих строк.

Данные

d <- read.table(text=" CHR            END         START          REF         ALT

                1            1445         1446            G           A
                1            1445         1446            A           G
                3            2787         2787            T           -
                3            2787         2787            -           T", header=T)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...