Допустим, у меня есть две факторные переменные, одна из которых в моем случае имеет много факторов (multi.factor
), а другая, которая имеет только два фактора (two.factor
), и сама является фиктивной.
df <- data.frame(two.factor = rep(c(0,1), 4)) %>%
mutate(multi.factor = ceiling(row_number()/2))
df
#> two.factor multi.factor
#> 1 0 1
#> 2 1 1
#> 3 0 2
#> 4 1 2
#> 5 0 3
#> 6 1 3
#> 7 0 4
#> 8 1 4
Как я могу использовать dplyr
или другой метод tidyverse
для создания набора фиктивных терминов взаимодействия для этих двух переменных? Другими словами, мне нужно 4 * 1 = 4 новых фиктивных переменных, которые равны 1, если two.factor
равно 1, а multi.factor
- это фактор, названный в термине взаимодействия, иначе 0. Долгий путь для этого будет:
df %<>%
mutate(interact.1 = case_when(multi.factor == 1 & two.factor == 1 ~ 1, TRUE ~ 0)) %>%
mutate(interact.2 = case_when(multi.factor == 2 & two.factor == 1 ~ 1, TRUE ~ 0)) %>%
mutate(interact.3 = case_when(multi.factor == 3 & two.factor == 1 ~ 1, TRUE ~ 0)) %>%
mutate(interact.4 = case_when(multi.factor == 4 & two.factor == 1 ~ 1, TRUE ~ 0))
df
#> two.factor multi.factor interact.1 interact.2 interact.3 interact.4
#> 1 0 1 0 0 0 0
#> 2 1 1 1 0 0 0
#> 3 0 2 0 0 0 0
#> 4 1 2 0 1 0 0
#> 5 0 3 0 0 0 0
#> 6 1 3 0 0 1 0
#> 7 0 4 0 0 0 0
#> 8 1 4 0 0 0 1
(Я еще не сделал фактические факторы multi.factor
или two.factor
, и я просто использую целые числа для представления уровней факторов для упрощения репликации. В моих реальных данных multi.factor
- это строки. Я подозреваю, решение tidyverse
не волнует.)