Создание имитированного фрейма данных для вас:
df <- data.frame(id = c("001", "002", "003", "004", "005"),
PHQ_1 = c("Not at all", "Not at all", "Sometimes", "Sometimes", "Several Days"),
PHQ_2 = c("Sometimes", "Sometimes", "Several Days", "More than half the days", "Nearly everyday"))
Использование mutate_at
для выбора элементов анкеты, а затем массовое применение recode
из пакета psych
для изменения шкал Ликерта сфакторы числовые.Задавая «имя» для новых столбцов, и они не заменят старые столбцы (например, «numeric_columns» в приведенном ниже примере).
Как только это будет сделано, снова используйте mutate
для вычисления сумм строк ипоместите его в новый столбец.
library(dplyr)
library(psych)
test <- df %>%
mutate_at(vars(PHQ_1:PHQ_2), funs(numeric_columns = recode(.,
"Not at all" = 0,
"Sometimes" = 1,
"Several Days" = 1,
"More than half the days" = 2,
"Nearly everyday" = 3))) %>%
mutate(total = rowSums(select(., contains("numeric_columns"))))
Пример вывода следующий.Исходные столбцы сохраняются, и у вас есть новые столбцы в числовом формате, а также общий балл анкеты.
id PHQ_1 PHQ_2 PHQ_1_numeric_columns PHQ_2_numeric_columns total
1 001 Not at all Sometimes 0 1 1
2 002 Not at all Sometimes 0 1 1
3 003 Sometimes Several Days 1 1 2
4 004 Sometimes More than half the days 1 2 3
5 005 Several Days Nearly everyday 1 3 4