Как найти самые маленькие элементы из нескольких списков в R? - PullRequest
0 голосов
/ 11 марта 2020

У меня три фрейма данных, в том числе строки - гены (имена генов одинаковы), а столбцы - Оценка (коэффициенты корреляции), P-значения, Q-значения. Вы можете увидеть рисунок, чтобы легко понять структуру списков.

fig1 fig3 fig2

Прямо сейчас я хочу извлечь гены из трех списков и иметь одновременно самые маленькие отрицательные коэффициенты корреляции в трех списках. Я заказал отрицательные коэффициенты корреляции в порядке возрастания. Например, ген "IGF1R" соответствует моему требованию.

Может кто-нибудь помочь мне. Большое спасибо заранее!

1 Ответ

1 голос
/ 11 марта 2020

Предполагая, что ваши элементы являются data.frames, вы можете поместить их в список, а затем работать с каждым элементом одновременно. Эта реализация находит строку с минимальным значением hp и выводит ее список. В результате получается список, который можно свернуть в data.frame, используя do.call. Если вам нужен источник элемента (то есть, из какого источника data.frame он был), решение более сложное, но ничего особенного.

Значения в этих

xy <- split(mtcars, f = mtcars$cyl)

out <- sapply(xy, FUN = function(x) {
  x[which.min(x$hp), ]
}, simplify = FALSE)

> out
$`4`
             mpg cyl disp hp drat    wt  qsec vs am gear carb
Honda Civic 30.4   4 75.7 52 4.93 1.615 18.52  1  1    4    2

$`6`
         mpg cyl disp  hp drat   wt  qsec vs am gear carb
Valiant 18.1   6  225 105 2.76 3.46 20.22  1  0    3    1

$`8`
                  mpg cyl disp  hp drat   wt  qsec vs am gear carb
Dodge Challenger 15.5   8  318 150 2.76 3.52 16.87  0  0    3    2

> do.call(rbind, out)
   mpg cyl  disp  hp drat    wt  qsec vs am gear carb
4 30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
6 18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
8 15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
...