Один из способов сделать это - выполнить отдельные переменные и взаимодействия отдельно, а затем объединить их вместе:
library(tidyverse)
tbl <- structure(list(ID = c(1, 1, 1, 1, 2, 2), Page = c("homepage", "homepage", "categorypage", "categorypage", "homepage", "homepage"), Click = c("logo", "search", "logo", "search", "logo", "search")), class = c("spec_tbl_df", "tbl_df", "tbl", "data.frame"), row.names = c(NA, -6L), spec = structure(list(cols = list(ID = structure(list(), class = c("collector_double", "collector")), Page = structure(list(), class = c("collector_character", "collector")), Click = structure(list(), class = c("collector_character", "collector")), X4 = structure(list(), class = c("collector_logical", "collector"))), default = structure(list(), class = c("collector_guess", "collector")), skip = 2), class = "col_spec"))
tbl
#> # A tibble: 6 x 3
#> ID Page Click
#> <dbl> <chr> <chr>
#> 1 1 homepage logo
#> 2 1 homepage search
#> 3 1 categorypage logo
#> 4 1 categorypage search
#> 5 2 homepage logo
#> 6 2 homepage search
tbl %>%
gather(variable, value, Page, Click) %>%
transmute(ID, colname = str_c(variable, "_", value), presence = 1) %>%
distinct() %>% # Individual variables now done, now add interactions
bind_rows(transmute(tbl, ID, colname = str_c(Page, ":", Click), presence = 1)) %>%
spread(colname, presence, fill = 0) %>%
select(ID, matches("Page_"), matches("Click_"), matches(":"))
#> # A tibble: 2 x 9
#> ID Page_categorypa… Page_homepage Click_logo Click_search
#> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 1 1 1 1 1
#> 2 2 0 1 1 1
#> # … with 4 more variables: `categorypage:logo` <dbl>,
#> # `categorypage:search` <dbl>, `homepage:logo` <dbl>,
#> # `homepage:search` <dbl>
Создано в 2019-05-22 с помощью представпакет (v0.2.1)