У меня есть данные в виде удостоверения личности и продуктов питания:
adf<-data.frame(ID=c("a","a","a","b","b","b","b","c","c"),
foods=c("apple","orange","banana","apple","banana","tomato","pear","pear","onion"))
У меня также есть список необходимых продуктов, по которым для каждого удостоверения личности проводится проверка:
required_foods<-c("apple","tomato")
Я заинтересован в создании столбца с именем «missing_foods», в котором содержится разделенный запятыми список всех и всех продуктов в required_foods
, которых нет в столбце foods
моих данных, сгруппированных по идентификатору.
В desired_output
ниже приведен пример того, чего я надеюсь достичь sh.
desired_output<-data.frame(ID=c("a","a","a","b","b","b","b","c","c"),
foods=c("apple","orange","banana","apple","banana","tomato","pear","pear","onion"),
missing_foods=c("tomato","tomato","tomato","","","","","apple,tomato","apple,tomato"))
Мои попытки решить эту проблему до сих пор были бесплодными. В идеале я надеюсь получить ответ dplyr, который будет иметь гибкость, позволяющую создавать списки required_food различной длины. В конечном итоге я буду составлять несколько необходимых списков _... и надеюсь создать для каждого из них новый столбец.
Мои попытки:
adf2<-adf%>%
group_by(ID)%>%
mutate(missing_foods= !(required_foods %in% foods))
adf2<-adf%>%
group_by(ID)%>%
mutate(missing_foods= paste(!(required_foods %in% foods),sep=","))
adf2<-adf%>%
group_by(ID)%>%
mutate(missing_foods= for (f in 1:length(required_foods)){
ifelse(f %in% required_foods,paste0(""),
paste0(f,","))
})
Любая помощь будет принята с благодарностью.