首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用标准评估、Forcat和Stringr记录多个满意度量表变量的函数

用标准评估、Forcat和Stringr记录多个满意度量表变量的函数
EN

Stack Overflow用户
提问于 2017-03-01 02:37:49
回答 1查看 178关注 0票数 0
代码语言:javascript
复制
library(tidyverse)
library(stringr)
library(lazyeval)

下面是一个简单数据示例的数据..。

代码语言: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)

下面的代码是将满意度分数列重新编码为满意、不满意和中立的三类。

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

但是,我的实际示例涉及为多个文件重新编码相同的满意度等级,每个文件都有不同数量的满意度等级列。因此,我想将它包装成一个函数,它允许我输入dataframe名称,以及任何数量的要重新编码的列。下面是我试图使用的代码的一个变体,但我无法让它工作。我一直在玩.dots,还有“.”,但是找不到有用的东西。

代码语言:javascript
复制
 REC<-function(data,...){
data %>% 
 mutate_at(vars(...), 
     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")))
                   }

我应该在mutate_at中使用标准评估吗?另外,我必须在.中使用.dots吗?如果标准评估不适用于mutate_at,我愿意使用其他功能/技术来实现相同的最终目标,最好是在tidyverse中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-02 09:30:08

starts_with("Sat")对所有文件都有效吗?如果是这样的话,不管有多少列以"Sat“开头,函数都能工作。

代码语言:javascript
复制
REC <- function(data){
  data %>% 
    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
复制
REC <- function(data, variable){
  data %>% 
    mutate_at(vars(variable),
              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")))
}  

然后REC(df, 2: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/42522204

复制
相关文章

相似问题

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