Я хотел бы создать вектор, основанный на условиях нескольких других векторов. Условия находятся в порядке убывания приоритета. Вот простой пример, в котором я создаю переменную 'see1', которая должна содержать разные буквы (но не NA). Приоритет для его создания является иерархическим: l1> l2> l3> l4. Например. «see1» может быть присвоен статус «l4», если все остальные условия равны NA, и ему будет автоматически присвоено состояние «l1», если «l1» не является NA («l1» перекрывает другие столбцы). Я использовал вложенный ifelse для создания 'see1'.Альтернатива вложенным ifelse на основе условий с различным приоритетом
test <- data.frame(id=c("a","b","c","d","e","f"),
l1=c(NA,NA,"A",NA,"B", NA),
l2=c(NA,NA,"N","N",NA,NA),
l3=c("V",NA,NA,NA,"V","V"),
l4=c("H","H",NA,NA,rep("H",2)), stringsAsFactors=F)
test$see1 <- ifelse(test$l1%in%c("A", "B"), test$l1,
ifelse(test$l2%in%"N", "N",
ifelse(test$l3%in%"V", "V",
ifelse(test$l4%in%"H","H", NA))))
test
id l1 l2 l3 l4 see1
1 a <NA> <NA> V H V
2 b <NA> <NA> <NA> H H
3 c A N <NA> <NA> A
4 d <NA> N <NA> <NA> N
5 e B <NA> V H B
6 f <NA> <NA> V H V
Однако, при многих условиях/столбцах эта задача становится громоздкой. Я просмотрел похожие вопросы о «вложенном ifelse», но не столкнулся с этой проблемой.
В этом примере, в частности, (замена NA с первым не-NA значение), операция вы ищете называется 'coalesce' в SQL. [Вот хороший вопрос о его реализации в R] (http://stackoverflow.com/q/19253820/903061). – Gregor
Спасибо, Грегор! Это помогло! Я разместил решение ниже. – Tomiris