Представьте себе, что для собранной анкеты по десяткам предметов я хочу проверить правильность ответов на каждый вопрос. Чтобы выполнить эту манипуляцию по столбцам, я использую функцию mapply
, где векторизованными парами являются столбцы (несколько переменных) и векторы (несколько элементов) соответственно, подробности см. Ниже в демонстрационном коде. Однако при таком методе мне нужно сгенерировать переменные вручную, чтобы включить их в исходный фрейм данных, поэтому мне интересно, есть ли альтернативный метод, с помощью которого можно добиться аналогичного эффекта, используя многовариантную версию функции mutate
в dplyr пакетах? поэтому нет необходимости генерировать имена переменных вручную и реализовывать их в векторизованном виде.
##simulated data generation with four questions
IDs<-paste0('subj',0,1:7)
Q1<-c('A','B','C','A','A','A','D')
Q2<-c('A','B','B','B','B','D','C')
Q3<-c('B','B','C','C','C','D','C')
Q4<-c('A','D','D','B','D','D','C')
vect<-data.frame(cbind(IDs,Q1,Q2,Q3,Q4))
##answer for the four questions
answer<-c('A','B','C','D')
##method with mapply function
myfunc<-function(vec,value) {
ifelse(vec==value, TRUE, FALSE)
}
newvariable<-mapply(myfunc, vect[,2:5], answer)
colnames(newvariable)<-paste0('Q',1:4,"_ans")
newvariable
vect_new1<-cbind(vect,newvariable)
vect_new1