Как разместить данные на основе более чем одного условия - PullRequest
0 голосов
/ 23 мая 2019

Я ищу подмножество набора данных гена, выбирая гены на основе их класса машинного обучения (метки 0-2) и их идентификатора loci / rssnp.

Мои данные выглядят так:

Chr  Start   End     rssnp1        Type    gene     ML.prediction
1   1244733 1244734 rs2286773   LD_SNP  ACE                0
1   1257536 1257436 rs333333    LD_SNP  CPEB4              1
1   1252336 1252336 rs2286773   Sentinel    CPEB4          2
1   1252343 1252343 rs333333    LD_SNP  CPEB4              0
1   1254841 1254841 rs333333    LD_SNP  BRCA2              3
1   1256703 1267404 rs444444    LD_SNP  HER2               0
1   1269246 1269246 rs301159    LD_SNP  CPEB4              1
1   1370168 1370168 rs301159    LD_SNP  GLUT2              0 
1   1371824 1371824 r4444444    LD_SNP  GLUPA1             1
1   1372591 1372591 rs111111    LD_SNP  GLUPA1             1
1   1372591 1372591 rs111111    LD_SNP  GLUPA2             1
1   1372591 1372591 rs111111    LD_SNP  GLUPA3             1

Мой вывод будет выглядеть так:

Chr  Start   End     rssnp1        Type    gene     ML.prediction
1   1244733 1244734 rs2286773   LD_SNP  ACE                0
1   1252336 1252336 rs2286773   Sentinel    CPEB4          2
1   1257536 1257436 rs333333    LD_SNP  CPEB4              1
1   1252343 1252343 rs333333    LD_SNP  CPEB4              0
1   1254841 1254841 rs333333    LD_SNP  BRCA2              3
1   1269246 1269246 rs301159    LD_SNP  CPEB4              1
1   1370168 1370168 rs301159    LD_SNP  GLUT2              0
1   1256703 1267404 rs444444    LD_SNP  HER2               0 
1   1371824 1371824 r4444444    LD_SNP  GLUPA1             1

Таким образом, он только выбирает гены с прогнозом 0, а затем выбирает окружающие гены этого гена на основе соответствующего rssnp1.

Я пытался использовать lapply () и order, но я начинающий и изо всех сил стараюсь сделать что-нибудь, что вообще работает, поэтому любое руководство о том, какие функции я должен использовать или как установить мои условия в lapply (), будет оценены.

В настоящее время я работаю, получаю все rssnp1 для каждого гена с прогнозом 0 в excel, а затем упорядочиваю свой файл с помощью

order <- df[order(match(df$rssnp1, target_order)),] 

Целевой порядок - это ввод вручную сотен идентификаторов rssnp1, но есть ли способ быстрее, чем этот?

Ответы [ 2 ]

2 голосов
/ 23 мая 2019

Обратите внимание, что в данных выборки, по-видимому, имеется ошибка, где rs444444 отличается от r4444444; поэтому ожидаемый результат не соответствует вашим входным данным.

Кроме этого, здесь есть опция dplyr

df %>%
    group_by(rssnp1) %>%
    filter(any(ML.prediction == 0)) %>%
    ungroup()
## A tibble: 8 x 7
#    Chr   Start     End rssnp1    Type     gene  ML.prediction
#  <int>   <int>   <int> <fct>     <fct>    <fct>         <int>
#1     1 1244733 1244734 rs2286773 LD_SNP   ACE               0
#2     1 1257536 1257436 rs333333  LD_SNP   CPEB4             1
#3     1 1252336 1252336 rs2286773 Sentinel CPEB4             2
#4     1 1252343 1252343 rs333333  LD_SNP   CPEB4             0
#5     1 1254841 1254841 rs333333  LD_SNP   BRCA2             3
#6     1 1256703 1267404 rs444444  LD_SNP   HER2              0
#7     1 1269246 1269246 rs301159  LD_SNP   CPEB4             1
#8     1 1370168 1370168 rs301159  LD_SNP   GLUT2             0

Объяснение: Сгруппируйте записи по rssnp1, а затем сохраните только те группы, в которых хотя бы одна запись имеет ML.prediction == 0.


Пример данных

df <- read.table(text =
    "Chr  Start   End     rssnp1        Type    gene     ML.prediction
1   1244733 1244734 rs2286773   LD_SNP  ACE                0
1   1257536 1257436 rs333333    LD_SNP  CPEB4              1
1   1252336 1252336 rs2286773   Sentinel    CPEB4          2
1   1252343 1252343 rs333333    LD_SNP  CPEB4              0
1   1254841 1254841 rs333333    LD_SNP  BRCA2              3
1   1256703 1267404 rs444444    LD_SNP  HER2               0
1   1269246 1269246 rs301159    LD_SNP  CPEB4              1
1   1370168 1370168 rs301159    LD_SNP  GLUT2              0
1   1371824 1371824 r4444444    LD_SNP  GLUPA1             1
1   1372591 1372591 rs111111    LD_SNP  GLUPA1             1
1   1372591 1372591 rs111111    LD_SNP  GLUPA2             1
1   1372591 1372591 rs111111    LD_SNP  GLUPA3             1", header = T)
2 голосов
/ 23 мая 2019

Я бы выполнил двухэтапный выбор:

  1. Поиск вариантов с прогнозом = 0:

    prediction_snps = df$rssnp1[df$ML.prediction == 0]
    
  2. Подмножество ваших данныхна основе SNP:

    result = df[df$rssnp1 %in% prediction_snps, ]
    

Вы также можете добиться аналогичных результатов, используя dplyr или data.table.В любом случае, lapply и order здесь не нужны и на самом деле не помогают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...