У меня есть набор данных с несколькими анкетами. В приведенном ниже примере var будет одним вопросником, а оценка - другим.
var_1 <- c(1, 2, 3, 4, 5)
var_2 <- c(5, 4, 3, 2, 1)
score_1 <- c(3, 1, 5, 2, 4)
score_2 <- c(2, 4, 1, 5, 3)
dat <- data.frame(var_1, var_2, score_1, score_2)
Используя tidyverse, я хочу создать новые переменные, которые рассчитываются на основе среднего значения каждого вопросника. Я пробовал оба следующих синтаксиса:
dat %>%
var <- rowMeans(grep("var", names(dat))) %>%
score <- rowMeans(grep("score", names(dat)))
dat %>%
var <- rowMeans(str_which(names(dat), "var")) %>%
score <- rowMeans(str_which(names(dat), "score"))
Однако оба возвращают одну и ту же ошибку
Error in rowMeans(grep("var", names(dat))) :
'x' must be an array of at least two dimensions
Но когда я использую grep в Base R со следующим синтаксисом, grep работает нормально.
dat$var <- rowMeans(dat[grep("var", names(dat))])
dat$score <- rowMeans(dat[grep("score", names(dat))])
Однако, поскольку у меня несколько анкет, набирать приведенный выше синтаксис для каждой анкеты утомительно. Есть ли способ, которым я могу использовать канал с grep или str_which для создания моих переменных?