对满足两个条件的变量使用 mutate_at dplyr R

use mutate_at for variables that meet two criteria dplyr R

我正在尝试对数据框中的某些项目进行反向评分(重新编码)。所有反向评分的项目都以 R 结尾,每个量表都有一个独特的开始("hc"、"out" 和 "hm")。我通常只 select 所有以 "r" 结尾的变量,但问题是一些量表是 5 分制("hc" 和 "out")和其他采用 7 分制 ("hm")。

这是一个非常非常大的数据集的示例:

library(tidyverse)

data <- tibble(name = c("Mike", "Ray", "Hassan"),
               hc_1 = c(1, 2, 3),
               hc_2r = c(5, 5, 4),
               out_1r = c(5, 4, 2),
               out_2 = c(2, 4, 5),
               out_3r = c(2, 2, 1),
               hm_1 = c(6, 7, 7),
               hm_2r = c(7, 1, 7))

假设我想一次做一个量表,所以我从 hm 开始,它是七分制。

我想用 & 语句尝试类似的操作,但出现错误:

library(tidyverse)
library(car)
data %>%
  mutate_at(vars(ends_with("r") & starts_with("hm")), ~(recode(., "1=7; 2=6; 3=5; 4=4; 5=3; 6=2; 7=1")))

Error: ends_with("r") & starts_with("hc") must evaluate to column positions or names, not a logical vector

让它一次对这几个变量执行反向评分的简洁方法是什么?再一次,数据集太大了,几乎一次 select 个单独的变量。

谢谢!

这里用matches会更方便

library(tidyverse)
data %>%
     mutate_at(vars(matches("^hm.*r$")), ~(recode(.,
              "1=7; 2=6; 3=5; 4=4; 5=3; 6=2; 7=1")))