一起使用 recode 和 case_when

4 r dplyr

表 1$subject 包含变量“生物学”、“化学”和“物理学”。对于表 2,我想重新编码,以将所有生物学/化学实例替换为 1,将所有物理实例替换为 0。

我尝试了以下代码,因为我相信使用 recode 和 case_when 命令可以实现这一点:

    Table2 <- recode(Table1, case_when(
    .$subject <= "biology" ~ 1,
    .$subject <= "chemistry" ~ 1,
    .$subject <= "physics" ~ 0))
Run Code Online (Sandbox Code Playgroud)

目前,我收到一条错误消息,指出“case_when 必须是双面公式,而不是逻辑公式”。我是 R 的新手,所以我不太确定我做错了什么。如果有人有任何想法,真的很感激!

aus*_*sen 5

recodecase_when上载体,而不是数据帧进行操作。因此,要创建新的数据框,您需要先调用mutate,然后在mutate使用中调用recodecase_when创建新列(或覆盖现有列)。

(此外,从最新的 dplyr 版本开始,您不再需要使用.$when using case_when


library(tibble)
library(dplyr)

df <- tribble(
  ~subject,
  "chemistry",
  "biology",
  "physics"
)

df %>% 
  mutate(subject2 = case_when(
    subject == "chemistry" ~ 1,
    subject == "biology" ~ 1,
    subject == "physics" ~ 2,
  ))

#> # A tibble: 3 x 2
#>     subject subject2
#>       <chr>    <dbl>
#> 1 chemistry        1
#> 2   biology        1
#> 3   physics        2

df %>% 
  mutate(subject2 = recode(
    subject, 
    "chemistry" = 1,
    "biology" = 1,
    "physics" = 2,
  ))

#> # A tibble: 3 x 2
#>     subject subject2
#>       <chr>    <dbl>
#> 1 chemistry        1
#> 2   biology        1
#> 3   physics        2
Run Code Online (Sandbox Code Playgroud)