【发布时间】:2017-02-28 03:43:12
【问题描述】:
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 函数中使用“contains”或“matches”之类的内容来查找包含“Sat”或“sat”的所有类别用于满意的重新编码,以及“Dis”或“dis”用于不满意的类别,以及中性类别的“中性”或“中性”。
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")))))))
}
【问题讨论】: