У меня есть набор данных geneti c, где каждая строка описывает ген и имеет столбец бета с несколькими значениями бета, которые я сжал в одну строку / ячейку (из уровня вариантов, где несколько вариантов в одном гене дали несколько бета-версий ). Бета - это величина эффекта, которую ген может оказать на состояние, поэтому важны как большие отрицательные значения, так и большие положительные значения. Я пытаюсь написать код, который выбирает либо наибольшее отрицательное, либо наибольшее положительное бета-значение для гена, обрезая его до -0,5 и 0,5.
Правила, которые я пытаюсь кодировать, таковы:
Если ген / строка имеет значение меньше -0,5 и нет значений выше 0,5, оставьте только самое большое отрицательное значение.
Если оно имеет значение выше 0,5 и нет значений меньше -0,5, сохраните только наибольшее положительное значение.
Если оно не имеет значений меньше -0,5 или больше 0,5, сохраняйте наибольшее значение.
Если оно имеет оба значения меньше -0,5 и больше 0,5, сохраняйте наибольшее значение.
Например, мои данные выглядят так:
Gene Beta(s)
ACE 0.01, -0.6, 0.4
BRCA 0.7, -0.2, 0.2
ZAP70 0.001, 0.02, -0.003
P53 0.8, -0.6, 0.001
Ожидаемый результат (выбор наибольшего отрицательного или положительного значения в зависимости от заданных условий):
Gene Beta(s)
ACE -0.6
BRCA 0.7
ZAP70 0.02
P53 0.8
Я из биологии и новичок в R, так что не знаю, как это кодировать. В настоящее время я работаю с функциями, чтобы выбрать максимальное или минимальное бета-значение для гена, но я не знаю, как исправить это с помощью следующих условий:
max2 = function(x) if(all(is.na(x))) NA else max(x,na.rm = T)
getmax = function(col) str_extract_all(col,"[0-9\\.-]+") %>%
lapply(.,function(x)max2(as.numeric(x)) ) %>%
unlist()
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()
test <- df %>%
mutate_at(names(df)[2],getmax)
Любая помощь в правильном направлении как установить несколько условных операторов.
Пример данных:
dput(df)
structure(list(Gene = c("ACE", "BRCA", "ZAP70", "P53"), `Beta(s)` = c("0.01, -0.6, 0.4",
"0.7, -0.2, 0.2", "0.001, 0.02, -0.003", "0.8, -0.6, 0.001")), row.names = c(NA,
-4L), class = c("data.table", "data.frame"))