在数据框中重新编码多个数字变量

Recoding multiple numeric variables in dataframe

有人可以检查我在做什么错误吗?我所有的变量都是李克特量表,从 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,

错误是

Error: .vars must be a character/numeric vector or a vars() object, not a list Run rlang::last_error() to see where the error occurred.

既然您已经在使用dplyr,我提出一个dplyr解决方案。此外,由于您插入的所有变量都在 1 到 7 之间的李克特量表中,您可以将 8 和它们的值 - [=15] 之间的差异应用于所有你想要的变量(由向量 all_your_vars 表示) =] 将保持 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