Как сохранить и отделить данные, уникальные для каждого метода, во всех трех методах или только в двух методах? - PullRequest
0 голосов
/ 21 июня 2019

У меня есть набор данных, в котором я идентифицировал соединения по каждому разному экспериментальному методу (Gradient, Isocratic и HILIC).Я хотел бы иметь возможность хранить / подмножество результатов таким образом, чтобы я получил соединения, которые идентифицированы во всех трех методах, уникальных для каждого метода, и совпадение между двумя методами.В конце концов я смогу создать рисунок типа диаграммы Венна между тремя методами и идентифицированными соединениями.

Я пробовал "unique ()" и "subset ()" в столбце "Соединение", но яне знаю, как добавить еще одно условие для метода.

'''head(Data, n = 12)'''
       Precursor.Ion         Compound    Method
1            141             Methanol  Gradient
2            143             Methanol  Gradient
3             82              Toluene  Gradient
4             54          Isopropanol  Gradient
5             47                Water  Gradient
6             45                Water  Gradient
7            135              Toluene Isocratic
8             82          Acetonirile Isocratic
9             91              Acetone Isocratic
10            43              Toluene     HILIC
11            31          Isopropanol     HILIC
12            97 Methyltertbutylether     HILIC

'''unique(Data$Compound)'''
Methanol             Toluene              Isopropanol          Water               
Acetonirile          Acetone              Methyltertbutylether

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

'''All'''
Toluene
'''Gradient'''
Methanol   Water
'''Isocratic'''
Acetone, Acetonitrile
'''HILIC'''
Methyltertbutylether
'''Gradient and Isocratic'''
N/A
'''Gradient and HILIC'''
Isopropanol
'''Isocratic and HILIC'''
N/A

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

Это было бы очень легко с моим nVennR пакетом.С таблицей, хранящейся в myT,

> library(nVennR)
> grad <- subset(myT, Method == "Gradient")$Compound
> iso <- subset(myT, Method == "Isocratic")$Compound
> hil <- subset(myT, Method == "HILIC")$Compound
> myV <- plotVenn(list(Gradient=grad, Isocratic=iso, HILIC=hil))

> listVennRegions(myV)
$`0, 0, 1 (HILIC)`
[1] "Methyltertbutylether"

$`0, 1, 0 (Isocratic)`
[1] "Acetonirile" "Acetone"    

$`1, 0, 0 (Gradient)`
[1] "Methanol" "Water"   

$`1, 0, 1 (Gradient, HILIC)`
[1] "Isopropanol"

$`1, 1, 1 (Gradient, Isocratic, HILIC)`
[1] "Toluene"


> listVennRegions(myV, na.rm = F)
$`0, 0, 0 ()`
[1] NA

$`0, 0, 1 (HILIC)`
[1] "Methyltertbutylether"

$`0, 1, 0 (Isocratic)`
[1] "Acetonirile" "Acetone"    

$`0, 1, 1 (Isocratic, HILIC)`
[1] NA

$`1, 0, 0 (Gradient)`
[1] "Methanol" "Water"   

$`1, 0, 1 (Gradient, HILIC)`
[1] "Isopropanol"

$`1, 1, 0 (Gradient, Isocratic)`
[1] NA

$`1, 1, 1 (Gradient, Isocratic, HILIC)`
[1] "Toluene"

Вы также получаете диаграмму Венна:

enter image description here

0 голосов
/ 21 июня 2019

Вот относительно простой подход Tidyverse, который, к сожалению, пропускает записи N/A.Если они вам действительно нужны, их можно добавить позже.(Дополнительно Gradient, Isocratic, HILIC соответствует All.)

> library(dplyr)
> library(readr)
> tbl <- read_table("
+       141             Methanol  Gradient
+       143             Methanol  Gradient
+        82              Toluene  Gradient
+        54          Isopropanol  Gradient
+        47                Water  Gradient
+        45                Water  Gradient
+       135              Toluene Isocratic
+        82          Acetonirile Isocratic
+        91              Acetone Isocratic
+        43              Toluene     HILIC
+        31          Isopropanol     HILIC
+        97 Methyltertbutylether     HILIC
+ ",
+ col_names=c("Precursor.Ion", "Compound", "Method"),
+ col_types=cols(Precursor.Ion=col_integer(), Compound=col_character(), Method=col_character()))
> collapse <- ", "
> tbl %>%
+     group_by(Compound) %>%
+     summarize(Methods=sort(paste(unique(Method), collapse=collapse))) %>%
+     group_by(Methods) %>%
+     summarize(Compounds=sort(paste(unique(Compound), collapse=collapse)))
# A tibble: 5 x 2
  Methods                    Compounds           
  <chr>                      <chr>               
1 Gradient                   Methanol, Water     
2 Gradient, HILIC            Isopropanol         
3 Gradient, Isocratic, HILIC Toluene             
4 HILIC                      Methyltertbutylether
5 Isocratic                  Acetone, Acetonirile
...