Функция R для присвоения значения на основе нескольких столбцов

У меня есть функция, которая присваивает значение (кошка, собака или кролик) столбцу c кадра данных на основе записи в столбце b:

mydf <- data.frame(a = c(1:4), b= c(1,3,5,9))
myfunction <- function(x) { 
if(x == 1 | x == 2) y <- "cat"
if(x > 2 & x < 6) y <- "dog"
if(x > 6) y <- "rabbit"
return(y)
 }
mydf$c <- sapply(mydf$b,myfunction)

Теперь я хотел бы написать функцию, которая делает присвоение условным для значений столбцов a AND b. Так, например, условия могут быть следующими: A: cat назначается тогда и только тогда, когда mydf $ a == 1 & mydf $ b == 1; B: dog назначается всякий раз, когда mydf $ a == 2 независимо от значения mydf $ b, а также когда mydf $ a == 3 & mydf $ b == 5; C: кролик назначается для остальных случаев. Возникли проблемы с синтаксисом, не удалось найти пример из предыдущего поста.


person marcel    schedule 28.10.2014    source источник
comment
В вашем описании написано mydf$a==2 regardless of the value of mydf$b, а в коде x >2 & x <6 Какой из них правильный?   -  person akrun    schedule 28.10.2014


Ответы (1)


Вы можете попробовать ifelse

 indx <- as.character(interaction(mydf,sep=""))
 mydf$c <- ifelse(indx=='11', 'cat', 
       ifelse(substr(indx,1,1)=='2'|indx=='35', 'dog', 'rabbit')) 

 mydf
 #  a b      c
 #1 1 1    cat
 #2 2 3    dog
 #3 3 5    dog
 #4 4 9 rabbit
person akrun    schedule 28.10.2014
comment
Этот ответ отлично работает, и я узнал о двух очень удобных трюках (взаимодействие и substr). Большое спасибо! - person marcel; 28.10.2014
comment
@marcel вы можете выполнить операцию с этим подмножеством столбцов, т.е. indx <- as.character(interaction(df[,3:4], sep="")). Вместо номеров столбцов можно также использовать colnames, т.е. df[, c("SomeColumn3", "SomeColumn4")] - person akrun; 28.10.2014