Как получить минимальное / максимальное значение из строк, которые учитывают отрицательные числа в R? - PullRequest
0 голосов
/ 17 января 2020

У меня есть данные, где каждая ячейка может иметь несколько значений, например:

Gene       Pvalue1             Pvalue2              Pvalue3                  Beta
Ace    0.0381, ., 0.00357    0.01755, 0.001385    0.0037, NA , 0.039         -0.03,1,15
NOS          NA                  0.02              0.001, 0.00067              0.00009,25,30

Я хочу применить min () и max () для данных каждого гена (всего у меня тысячи генов) в каждый столбец и получить наименьшее значение для значений pvalues, но наибольшее значение для столбцов, таких как бета Таким образом, выходные данные будут выглядеть так:

Gene       Pvalue1             Pvalue2              Pvalue3                  Beta
Ace        0.00357              0.001385             0.0037                   15
NOS          NA                  0.02                0.00067                  30

Я задал вопрос для этого ( Выберите минимальное или максимальное значения в одной ячейке (строка с разделителями) ), но лучшее решение имеет проблема, в которой он принимает отрицательные числа c и делает их все положительными.

min2 = function(x) if(all(is.na(x))) NA else min(x,na.rm = T)
getmin = function(col) str_extract_all(col,"[0-9\\.]+") %>%
  lapply(.,function(x)min2(as.numeric(x)) ) %>%
  unlist() 

df %>%
    mutate_at(names(df)[-1],getmin)

Как настроить этот код, чтобы отрицательные числа по-прежнему считались отрицательными? Я предполагаю, что это относится к "[0-9\\.]+", но я не могу найти какой-либо четкий ресурс о том, что эти символы означают в R. в этом контексте.

1 Ответ

1 голос
/ 17 января 2020

Простым решением было бы допустить знак '-', непосредственно предшествующий числам:

min2 <- function(x) if(all(is.na(x))) NA else min(x,na.rm = T)
getmin <- function(col) str_extract_all(col, pattern = "-?[0-9\\.]+") %>%
  lapply(.,function(x)min2(as.numeric(x)) ) %>%
  unlist()

В аргументе pattern str_extract_all:

  • -? означает «содержит или не содержит символ минус»
  • [0-9\\.] означает «число (0-9) или полная остановка»
  • + означает «встречающийся или больше раз '

Подробнее о том, как все эти работы можно найти здесь .

Надеюсь, это поможет!

...