подмножество R-кадра данных, соответствующего двум критериям столбца во 2-м кадре данных - PullRequest
0 голосов
/ 02 июня 2018

Я работаю над проектом транскриптомики, и у меня есть фрейм данных со столбцами для "SampleIDs", "hugo_name" и "Expression".DF имеет тысячи строк из-за множества имен генов для каждого образца.Я пытаюсь сделать шаг контроля качества, используя набор из 10 генов домашнего хозяйства, в котором я исключаю все «идентификаторы образца», для которых менее 9/10 генов домашнего хозяйства выражены выше предельного значения.По сути, я хочу взять все гены в DF $ hugo_name, которые соответствуют списку из 10 генов, и для каждого имени гена проверьте значение его выражения, чтобы убедиться, что оно находится выше моего списка предельных значений.

Мой фрейм данных с10 служебных генов и более низкие значения экспрессии отсечения:

    EHK_list <- c("C1orf43", "CHMP2A", "GPI", "PSMB2", "PSMB4", "RAB7A", "REEP5", "SNRPD3", "VCP", "VPS29")
    EHK_minimum <- data_frame("hugo_name" = EHK_list, "expression" = c(2.3697, 3.4964, 2.0620, 2.1240, 4.3081, 8.3988, 1.4969, -0.0066, 2.5436, 5.2886))
      show(EHK_minimum)
     <chr>          <dbl>
     1 C1orf43       2.37  
     2 CHMP2A        3.50  
     3 GPI           2.06  
     4 PSMB2         2.12  
     5 PSMB4         4.31  
     6 RAB7A         8.40  
     7 REEP5         1.50  
     8 SNRPD3       -0.0066
     9 VCP           2.54  
    10 VPS29         5.29 

Большой DF со всеми моими данными принимает форму:

    Sample_ID      hugo_name     Expression     
    Sample_1       SNRPD3        6669.0
    Sample_1       ABCDEF        400.2
         ..
         ..
    Sample_2       RAB7A         1.75
    Sample_2       ZYXVU         9.4

Я могу подналожить свой DF только на гены в EHK_list:

            QC_geneSubset <- DF[DF$hugo_name %in% EHK_list,]

              sample_ID     hugo_name     expression
              1: Sample1      RAB7A         1382.78
              2: Sample1      C1orf43       11.78
              3: Sample1      CHMP2A        75.5
                   .
                   .
             11: Sample2      RAB7A         33.3
             12: Sample2      C1orf43       12.1
             13: Sample2      CHMP2A        1500
                   .
                   .
             21: Sample3      RAB7A         66
             22: Sample3      C1orf43       1
             23: Sample3      CHMP2A        19
                   .
                   .

, но я не могу понять, как сохранить только строки из DF, где DF "hugo_name" (то есть имя гена) совпадает с тем, что в EHK_list И значение выражения DF>> = отсечказначение из фрейма данных EHK_minimum.То есть я хочу сопоставить кортеж (hugo_name, expression) и убедиться в том, что в образце значение выражения превышает указанные в моем списке срезы для> = 9/10 генов в списке.Есть идеи?

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

Отличное решение data.table.Ради этого есть один с dplyr.Обратите внимание, что я изменил на threshold имя переменной в вашем ключе data.frame.

     EHK_list <- c("C1orf43", "CHMP2A",
                   "GPI", "PSMB2", "PSMB4", "RAB7A",
                   "REEP5", "SNRPD3", "VCP", "VPS29")

     EHK_minimum <- data_frame("hugo_name" = EHK_list,
                                  "threshold" = c(2.3697, 3.4964, 2.0620,
     2.1240, 4.3081, 8.3988,
     1.4969, -0.0066, 2.5436, 5.2886))

Учитывая

    DF <- read.table(text = 
"sample_ID     hugo_name     expression
1: Sample1      RAB7A         1382.78
2: Sample1      C1orf43       11.78
3: Sample1      CHMP2A        75.5
11: Sample2      RAB7A         33.3
12: Sample2      C1orf43       12.1
13: Sample2      CHMP2A        1500
21: Sample3      RAB7A         66
22: Sample3      C1orf43       1
23: Sample3      CHMP2A        19",
header = TRUE, stringsAsFactors = FALSE)

Мы присоединяемся и фильтруем

DF %>% left_join(EHK_minimum) %>% filter(expression >= threshold)
Joining, by = "hugo_name"
  sample_ID hugo_name expression threshold
1   Sample1     RAB7A    1382.78    8.3988
2   Sample1   C1orf43      11.78    2.3697
3   Sample1    CHMP2A      75.50    3.4964
4   Sample2     RAB7A      33.30    8.3988
5   Sample2   C1orf43      12.10    2.3697
6   Sample2    CHMP2A    1500.00    3.4964
7   Sample3     RAB7A      66.00    8.3988
8   Sample3    CHMP2A      19.00    3.4964
0 голосов
/ 02 июня 2018

Соединение non-equi с использованием data.table может быть подходящим вариантом в этом случае, так как OP готов проверить критерии, где expression больше, чем cutoff выражение, определенное в EHK_minimum.

library(data.table)

setDT(EHK_minimum)
setDT(DF)

DF[EHK_minimum, on=.(hugo_name, expression >= expression), nomatch=0]

#    sample_ID hugo_name expression
# 1:   Sample1   C1orf43     2.3697
# 2:   Sample2   C1orf43     2.3697
# 3:   Sample3    CHMP2A     3.4964
# 4:   Sample1    CHMP2A     3.4964
# 5:   Sample2    CHMP2A     3.4964
# 6:   Sample2     RAB7A     8.3988
# 7:   Sample3     RAB7A     8.3988
# 8:   Sample1     RAB7A     8.3988

Данные: Создано на основе частичных данных, предоставленных OP

EHK_list <- c("C1orf43", "CHMP2A", "GPI", "PSMB2", "PSMB4", 
           "RAB7A", "REEP5", "SNRPD3", "VCP", "VPS29")
EHK_minimum <- data_frame("hugo_name" = EHK_list, 
   "expression" = c(2.3697, 3.4964, 2.0620, 2.1240, 4.3081, 8.3988, 
                   1.4969, -0.0066, 2.5436, 5.2886))


DF <- read.table(text = 
"sample_ID     hugo_name     expression
1: Sample1      RAB7A         1382.78
2: Sample1      C1orf43       11.78
3: Sample1      CHMP2A        75.5
11: Sample2      RAB7A         33.3
12: Sample2      C1orf43       12.1
13: Sample2      CHMP2A        1500
21: Sample3      RAB7A         66
22: Sample3      C1orf43       1
23: Sample3      CHMP2A        19",
header = TRUE, stringsAsFactors = FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...