У меня есть набор данных c geneti, где каждая строка описывает ген и имеет столбец бета с несколькими значениями бета, которые я сжал в одну строку / ячейку (из уровня вариантов, где несколько вариантов в одном гене дали несколько бета-версий) , Бета - это величина эффекта, которую ген может оказать на состояние, поэтому важны как большие отрицательные значения, так и большие положительные значения. Я пытаюсь написать код, который выбирает абсолютное значение из строк, а затем пытаюсь создать еще один новый столбец, который записывает, если абсолютное значение раньше было отрицательным - у меня есть биологические знания, поэтому я не уверен, возможно ли это или лучший способ сделать это?
Например, мои данные выглядят так:
Gene Beta
ACE 0.01, -0.6, 0.4
BRCA 0.7, -0.2, 0.2
ZAP70 NA
P53 0.8, -0.6, 0.001
Ожидаемый результат примерно такой (выбор абсолютного значения и отслеживание того, какие числа используются для отрицания) :
Gene Beta Negatives
ACE 0.6 1
BRCA 0.7 0
ZAP70 NA NA
P53 0.8 0
В настоящее время я застрял при получении абсолютного значения из каждой строки, что я пытаюсь это:
abs2 = function(x) if(all(is.na(x))) NA else abs(x,na.rm = T)
getabs = function(col) str_extract_all(col,"[0-9\\.-]+") %>%
lapply(.,function(x)abs2(as.numeric(x)) ) %>%
unlist()
test <- df %>%
mutate_at(names(df)[2],getabs)
#Outputs:
Error in abs(x, na.rm = T) : 2 arguments passed to 'abs' which requires 1
Любая помощь о том, как просто получить абсолютное значение в ячейка / строка была бы оценена, поскольку я предполагаю, что я мог бы также сделать столбец, получающий наибольшее отрицательное значение, сопоставить его с идентичными абсолютными значениями и использовать его в качестве моей записи отрицательных значений.
Входные данные:
dput(df)
structure(list(Gene = c("ACE", "BRCA", "ZAP70", "P53"), `Beta` = 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"))