使用标准评估、Forcats和Stringr重新编码多个满意度量表变量的函数

使用标准评估、Forcats和Stringr重新编码多个满意度量表变量的函数,r,stringr,tidyverse,lazyeval,R,Stringr,Tidyverse,Lazyeval,下面是一个简单数据帧示例的数据 library(tidyverse) library(stringr) library(lazyeval) 然而,我的真实例子涉及到为客户重新编写相同的满意度量表 多个文件,每个文件具有不同数量的满意度量表列。因此,我想将其包装成一个函数,该函数允许我输入数据帧名称,以及任意数量的要重新编码的列。下面是我试图使用的代码的一个变体,但我无法让它工作。我一直在玩。点和“…”,但找不到任何有效的东西 df %>% mutate_at(vars(starts_w

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

library(tidyverse)
library(stringr)
library(lazyeval)
然而,我的真实例子涉及到为客户重新编写相同的满意度量表 多个文件,每个文件具有不同数量的满意度量表列。因此,我想将其包装成一个函数,该函数允许我输入数据帧名称,以及任意数量的要重新编码的列。下面是我试图使用的代码的一个变体,但我无法让它工作。我一直在玩。点和“…”,但找不到任何有效的东西

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")))
REC%
在(vars(…)处突变,
funs(fct_collapse(因子(str_sub(,1,1),levels=as.character(1:7)),
满意=c(“7”、“6”、“5”),
不满意=c(“3”、“2”、“1”),
中性(=“4”)))
}
我应该使用标准评估和mutate_at吗?还有,我必须用带…的点吗。。。?如果标准评估不适用于mutate_at,我愿意使用其他功能/技术来实现相同的最终目标,最好是在tidyverse中

以(“Sat”)开头的
是否适用于所有文件?如果是这样,无论有多少列以“Sat”开头,该函数都将工作

 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")))
                   }
 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")))
                   }
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")))
} 
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")))
}  
# 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