library(dplyr)
library(forcats)
Ниже приведен простой фрейм данных, содержащий три столбца, которые необходимо перекодировать в три категории - удовлетворено, неудовлетворено, нейтрально.
Respondent<-c("Respondent1","Respondent2","Respondent3","Respondent4","Respondent5")
Sat1<-c("1 Extremely dissatisfied","2 Moderately dissatisfied","2 Moderately Dissatisfied","4 Neutral","7 Extrmely satified")
Sat2<-c("7 Extremely Satisfied","2. Moderately dissatisfied","4 Neutral","3 Slightly dissatisfied","3 Slightly Dissatisfied")
Sat3<-c("1 Extremely dissatisfied","7 Extremely satisfied","6 Moderately satisfied","4. Neutral","3 Slightly dissatisfied")
Pet<-c("Cat","Cat","Dog","Hamster","Rabbit")
df<-data.frame(Respondent,Sat1,Sat2,Sat3,Pet)
Я хотел бы использовать dplyr и forcats для перекодирования. Пример ниже.
REC<-df%>%mutate_at(vars(Sat1:Sat3),funs(Rec=fct_collapse(.,
Satisfied=c("7 Extremely satisfied","6 Moderately satisfied","5 Slightly Satisfied"),
Dissatisfied=c("2 Moderately dissatisfied","1 Extremely dissatisfied"),
Neutral="4 Neutral")))
Мне нужна функция, поскольку я буду делать это для нескольких файлов. Функция должна учитывать несколько переменных в качестве входных данных и учитывать различия в орфографии и пунктуации для разных категорий удовлетворенности. Например, «1 крайне недоволен», или «1. крайне не удовлетворен», или «1 крайне не удовлетворен» и т. Д.
Ниже приведен пример функции, но я не уверен, как разрешить нефиксированное количество переменных «Var» (я хотел бы использовать точки, ..., но у меня возникли проблемы с их работой), а также как использовать что-то вроде "содержит" или "соответствует" в функции fct_collapse, чтобы найти все категории, содержащие "Sat" или "Sat" для перекодировки удовлетворенных, и "Dis" или "dis" для категории неудовлетворенности и "Neutral" или «нейтральный» для нейтральной категории.
REC<-function(df,Var){
df%>%mutate_at(vars(Var),funs(Rec=fct_collapse(.,
Satisfied=c("7 Extremely satisfied","6 Moderately satisfied","5 Slightly Satisfied"),
Dissatisfied=c("2 Moderately dissatisfied","1 Extremely dissatisfied"),
Neutral="4 Neutral")))
}
или что-то в этом роде ...
Recode<-function(Df,Var,...){
Df%>%mutate_at(vars(Var),funs(Rec=fct_collapse(.,
Satisfied=c(select(matches("Sat|sat"),
Dissatisfied=c(select(matches("Dis"|"dis"),
Neutral="4 Neutral")))))))
}