Редактировать Отмечено опечатка: minor 1 и hetero 1 равно два, не один, как было написано.Создание порядковой переменной из двух цифр
У меня есть набор генотипов, они кодируются двумя численными переменными (minorpos и heteropos), которые могут принимать 1 или 0 (наличие или отсутствие маркера). Я хочу сделать третью переменную, которая переводит эту информацию в порядковой переменной так:
- минор 1 и гетеро 1 равно двум,
- или минор 0 и гетеро 1 равен 1,
- или минор 1 и hetero 0 равно 1,
- или minor 0 и hetero 0 равно нулю и т. д.
Вот набор данных, чтобы начать:
id <- c(1,2,3)
BDNF_minorpos <- c(0, 1, 0)
BDNF_heteropos <- c(1,1,0)
EGFR_minorpos <- c(0,0,1)
EGFR_heteropos <- c(0,0,0)
mydata<-data.frame(BDNF_minorpos, BDNF_heteropos, EGFR_minorpos, EGFR_heteropos)
будет выглядеть следующим образом:
> data.frame(BDNF_minorpos, BDNF_heteropos, EGFR_minorpos, EGFR_heteropos)
BDNF_minorpos BDNF_heteropos EGFR_minorpos EGFR_heteropos
1 0 1 0 0
2 1 1 0 0
3 0 0 1 0
Я пытался создать функцию, чтобы сделать работу, но я борюсь с IfElse синтаксиса , Это первая функция Я создаю в R.
genotypesToOrdinals <- function(variables, data){
for (i in variables)
var_minor <- paste(i, "_minorpos")
var_hetero <- paste(i, "_heteropos")
x<- ifelse((var_minor=0) & (var_hetero=0), 0,
ifelse(var_minor=0) & (var_hetero=1), 1,
ifelse(var_minor=1) & (var_hetero=0), 1,
ifelse(var_minor=1) & (var_hetero=1), 2)
data <- x
return (data)
}
Что я Тринг добиться того, чтобы передать имя переменных (p.ex. BDNF и EGFR), то функция должна Расположить BDNF_minorpos и BDNF_heteropos и создать новую переменную для хранения 0, 1 или 2. Она также должна обрабатывать NA, в случае, если она отсутствует, должна быть запись NA.
Я хотел бы вызвать функцию с:
genotypesToOrdinals(c("BDNF","EGFR"),mydata)
До сих пор я получаю сообщение об ошибке:
Error in ifelse((var_minor = 0) & (var_hetero = 0), 0, ifelse(var_minor = 0) & :
unused arguments (1, ifelse(var_minor = 1) & (var_hetero = 0), 1, ifelse(var_minor = 1) & (var_hetero = 1), 2)
Любая помощь будет оценена. Возможно, эта функция является излишней для такой простой задачи.
Что касается конкретной ошибки, 'ifelse' принимает 3 аргумента. ваш «внутренний» 'ifelse' присваивается только одному:' ifelse (var_minor = 0) ' – SymbolixAU