首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Forcats和Dplyr创建一个函数来记录多个满意度量表变量

使用Forcats和Dplyr创建一个函数来记录多个满意度量表变量
EN

Stack Overflow用户
提问于 2017-02-28 03:43:12
回答 1查看 532关注 0票数 0
代码语言:javascript
复制
library(dplyr)
library(forcats)

下面是一个简单的数据格式,包含三个需要重新编码的列--满意、不满意、中立。

代码语言:javascript
复制
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和forcat进行重新编码。下面是一个例子。

代码语言:javascript
复制
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“表示不满意类别,”中性“或”中性“用于中性类别。

代码语言:javascript
复制
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")))
}

或者类似的..。

代码语言:javascript
复制
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")))))))
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-28 13:48:32

问题是,使用因素,您不能解释不同的拼写:每个拼写将有不同的水平。您可以使用stringsAsFactors = FALSE创建数据框架,也可以使用不强迫字符串使用因素的data_frame来避免这种情况。

如果我很好地理解你的问题,你想要重新计算因素,在名字中会出现拼写错误。我将假设第一个字符是一个给出预期因素的数字,不管后面是什么。

使用stringr::str_sub,我将提取这个数字,并使用它来映射fct_collapse。注意:我添加了一个级别"3“,它没有出现在您的类别和级别之间的映射中,并且假设它”满意“。我还使用dplyr::starts_with只选择要更改的列。

代码语言:javascript
复制
df <- data_frame(Respondent,Sat1,Sat2,Sat3,Pet)
library(stringr)

df %>% 
  mutate_at(vars(starts_with("Sat")), 
            funs(fct_collapse(factor(str_sub(., 1, 1), levels = as.character(1:7)),
                              Satisfied = c("7","6","5"),
                              Dissatisfied =c ("3", "2","1"),
                              Neutral = "4")))

这是输出:

代码语言:javascript
复制
# A tibble: 5 × 5
   Respondent         Sat1         Sat2         Sat3     Pet
        <chr>       <fctr>       <fctr>       <fctr>   <chr>
1 Respondent1 Dissatisfied    Satisfied Dissatisfied     Cat
2 Respondent2 Dissatisfied Dissatisfied    Satisfied     Cat
3 Respondent3 Dissatisfied      Neutral    Satisfied     Dog
4 Respondent4      Neutral Dissatisfied      Neutral Hamster
5 Respondent5    Satisfied Dissatisfied Dissatisfied  Rabbit
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42499796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档