2014-10-28 2 views
0

У меня есть функция, которая присваивает значение (кошка, собака или кролик) в столбец С в dataframe на основании записи в колонке Ъ:функция R присвоить значение на основе нескольких столбцов

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: собака назначается всякий раз, когда mydf $ a == 2, независимо от значения mydf $ b, а также когда mydf $ a == 3 & mydf $ b == 5; C: кролик назначается для других случаев. Имея некоторые проблемы с синтаксисом, не удалось найти пример из предыдущего сообщения.

+0

В описании написано 'mydf $ а == 2 независимо от значения mydf $ b' и в коде' х> 2 и х <6' Какой один верно? – akrun

ответ

0

Вы можете попробовать 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 
+0

Этот ответ отлично работает, и я узнал о двух очень удобных трюках (взаимодействие и substr). Большое спасибо! – marcel

+0

@marcel вы можете выполнить операцию над этим подмножеством столбцов, т.е. 'indx <- as.character (взаимодействие (df [, 3: 4], sep =" ")). Вместо номеров столбцов вы также можете использовать 'colnames' ie. 'df [, c (" SomeColumn3 "," SomeColumn4 ")]' – akrun

 Смежные вопросы

  • Нет связанных вопросов^_^