如何使用 mutate_all 并使用 dplyr 正确地一起重新编码?

How to use mutate_all and recode together properly using dplyr?

我一直在尝试对数据集中的所有变量使用重新编码的 dplyr 变体,并结合 mutate_all,但它没有产生预期的输出。我找到的其他答案没有解决这个问题(例如

这是我尝试过的:

library(tidyverse)
library(car)

# Create sample data
df <- data_frame(a = c("Yes","Maybe","No","Yes"), b = c("No","Maybe","Yes","Yes"))

# Using dplyr::recode
df %>% mutate_all(funs(recode(., `1` = "Yes", `0` = "No", `NA` = "Maybe")))

对值没有影响:

# A tibble: 4 × 2
      a     b
  <chr> <chr>
1   Yes    No
2 Maybe Maybe
3    No   Yes
4   Yes   Yes

我想要的可以使用car::Recode复制:

# Using car::Recode
df %>% mutate_all(funs(Recode(., "'Yes' = 1; 'No' = 0; 'Maybe' = NA")))

这是期望的结果:

# A tibble: 4 × 2
      a     b
  <dbl> <dbl>
1     1     0
2    NA    NA
3     0     1
4     1     1

您在 dplyr::recode 中反转了 'key/values'。这对我有用:

df %>% mutate_all(funs(recode(., Yes = 1L, No = 0L, Maybe = NA_integer_)))

# A tibble: 4 × 2
      a     b
  <dbl> <dbl>
1     1     0
2    NA    NA
3     0     1
4     1     1

请注意,如果您不指定 NA 的类型,则会引发错误。

您也可以使用带引号或不带引号的值(例如:Yes'Yes' 都有效)