R: сгенерируйте фрейм данных из списков, проверив набор ссылок

#list #r #loops #dataframe

#Список #r #циклы #фрейм данных

Вопрос:

Моя коллега Саманта задала неясный вопрос, поэтому я задаю здесь вопрос. У нее есть переменная goterms , содержащая все фреймы данных, подлежащие анализу.

 goterms <- c('df1','df2','df3')
  

interestedGO Переменная содержит для каждого goterm списка с номерами ILMN. Итак, первый список содержит коды ILMN df1 и так далее.

 df1 <- c("ILMN_1665132", "ILMN_1691487", "ILMN_1716446", "ILMN_1769383",
         "ILMN_1772387", "ILMN_1783910", "ILMN_1784863")
df2 <- c("ILMN_1651599", "ILMN_1652693", "ILMN_1652825", "ILMN_1653324",
         "ILMN_1655595", "ILMN_1656057", "ILMN_1659077", "ILMN_1659923",
         "ILMN_1659947", "ILMN_1662322", "ILMN_1662619", "ILMN_1664565",
         "ILMN_1665132", "ILMN_1665738", "ILMN_1665859")
df3 <- c("ILMN_1661695", "ILMN_1665132", "ILMN_1716446", "ILMN_1737314",
         "ILMN_1772387", "ILMN_1784863", "ILMN_1796094", "ILMN_1800317",
         "ILMN_1800512", "ILMN_1807074")
interestedGO <- list(df1,df2,df3)
  

xx2 Это набор для сравнения. xx2 Переменная содержит подмножество всех возможных чисел ILMN.

 xx2 <- c("ILMN_1691487", "ILMN_1716446", "ILMN_1769383","ILMN_1832921")
  

x Это своего рода набор ссылок. x Переменная содержит все возможные номера ILMN.

 x <- c("ILMN_1665132", "ILMN_1691487", "ILMN_1716446", "ILMN_1769383", "ILMN_1772387",
       "ILMN_1783910", "ILMN_1784863","ILMN_1651599", "ILMN_1652693", "ILMN_1652825",
       "ILMN_1653324", "ILMN_1655595","ILMN_1656057", "ILMN_1659077", "ILMN_1659923",
       "ILMN_1659947", "ILMN_1662322","ILMN_1662619", "ILMN_1664565", "ILMN_1665132",
       "ILMN_1665738", "ILMN_1665859","ILMN_1661695", "ILMN_1665132", "ILMN_1716446",
       "ILMN_1737314", "ILMN_1772387","ILMN_1784863", "ILMN_1796094", "ILMN_1800317",
       "ILMN_1800512", "ILMN_1807074")
  

Со всеми этими переменными цель состоит в том, чтобы проверить для каждой из них goterm соответствующие коды ILMN, находятся ли они в наборе ссылок xx2 . Чтобы проверить это, используется функция сопоставления, и при отсутствии совпадений выдается 0, а совпадающие значения заменяются на 1. Чтобы дать удобный обзор всех goterms экспериментов, я хочу создать цикл, подобный приведенному ниже, который проверяет, есть ли каждый его ген в наборе ссылок x . Конечным результатом должен быть a, data.frame который сравнивает результаты каждого из goterm в data.frame .

 test <- list()
for (i in 1:length(goterms)) {
  goilmn <- as.data.frame(interestedGO[i])
  resultILMN <- match(goilmn[,1], xx2, nomatch=0)
  resultILMN[resultILMN!=0] <- 1
  result <- cbind(goilmn, resultILMN)
  colnames(result) <- c('x', 'result')

  zz <- merge(result, x, all=TRUE)
  zz[is.na(zz)] <- 0
  test[[i]] <- matrix(resultloop)
}
  

Конечный результат будет точно таким:

 1  ILMN_1651599      0  0  0
2  ILMN_1652693      0  0  0
3  ILMN_1652825      0  0  0
4  ILMN_1653324      0  0  0
5  ILMN_1655595      0  0  0
6  ILMN_1656057      0  0  0
7  ILMN_1659077      0  0  0
8  ILMN_1659923      0  0  0
9  ILMN_1659947      0  0  0
10 ILMN_1661695      0  0  0
11 ILMN_1662322      0  0  0
12 ILMN_1662619      0  0  0
13 ILMN_1664565      0  0  0
14 ILMN_1665132      0  0  0
15 ILMN_1665132      0  0  0
16 ILMN_1665132      0  0  0
17 ILMN_1665738      0  0  0
18 ILMN_1665859      0  0  0
19 ILMN_1691487      0  0  1
20 ILMN_1716446      1  0  1
21 ILMN_1716446      1  0  1
22 ILMN_1737314      0  0  0
23 ILMN_1769383      0  0  1
24 ILMN_1772387      0  0  0
25 ILMN_1772387      0  0  0
26 ILMN_1783910      0  0  0
27 ILMN_1784863      0  0  0
28 ILMN_1784863      0  0  0
29 ILMN_1796094      0  0  0
30 ILMN_1800317      0  0  0
31 ILMN_1800512      0  0  0
32 ILMN_1807074      0  0  0
  

Кто-нибудь может мне помочь с этим?
Спасибо!

Ответ №1:

У вас это работает?

 data.frame(code=x, sapply(interestedGO, function(curdf){
        ifelse(x %in% xx2, x %in% curdf, 0)
    }))
  

Комментарии:

1. 1 Неплохо. Я работал над аналогичным подходом, но ваше решение очень компактное.