表 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 的新手,所以我不太确定我做错了什么。如果有人有任何想法,真的很感激!
既recode与case_when上载体,而不是数据帧进行操作。因此,要创建新的数据框,您需要先调用mutate,然后在mutate使用中调用recode或case_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)