Перекодирование нескольких переменных numeri c в фрейм данных - PullRequest
1 голос
/ 19 июня 2020

Может кто-нибудь проверить, какую ошибку я делаю? Все мои переменные по шкале Лайкерта от 1 (полностью согласен) и 7 (крайне не согласен). Теперь в регрессии, они дают отрицательную связь с моей возрастающей зависимой переменной. Поэтому я хотел изменить порядок значений в данных. Я хочу изменить кодировку всех этих переменных с 1-7 на 7-1. Я пробовал следующий код

Newdata <- TPBdata %>% 
  mutate_at(c("V5","V6", "V7", "V8", "V9", "V10", "V11",
              "V12", "V13", "V15", "V15", "V15_b", "V15_a",
              "V15_eco", "V18", "V19", "V20", "V21", "V24", "V26", "V25", "V22",
              funs(recode(., 7 == 1, 6 == 2, 5 == 3, 4 == 4, 3 == 5, 2 == 6, 1== 7, .default = NaN))))

Я пробовал с '7' = 1 также без кавычек 7 = 1,

Ошибка:

Ошибка: .vars должен быть символом / цифрой c вектором или vars() объектом, а не списком Выполните rlang::last_error(), чтобы узнать, где произошла ошибка.

1 Ответ

1 голос
/ 19 июня 2020

Поскольку вы уже используете dplyr, я предлагаю решение dplyr. Кроме того, поскольку все переменные, которые вы вставили, имеют шкалу Лайкерта от 1 до 7, вы можете просто применить ко всем желаемым переменным (обозначенным вектором all_your_vars) разницу между 8 и их значением - NaN останется NaN.

TPBdata %>% 
  mutate(across(all_your_vars, ~ 8 - .x))

Пример

set.seed(42)
TPBdata <- data.frame(
  V5 = sample(c(1:7, NaN), 5, replace = TRUE),
  V6 = sample(c(1:7, NaN), 5, replace = TRUE)
)
#   V5  V6
# 1  1   4
# 2  5   2
# 3  1   2
# 4  1   1
# 5  2 NaN

all_your_vars <- c("V5", "V6")
TPBdata %>% 
  mutate(across(all_your_vars, ~ 8 - .x))
#   V5  V6
# 1  7   4
# 2  3   6
# 3  7   6
# 4  7   7
# 5  6 NaN
...