我们的目标是获取这样一个表:
<表类>
人
回答
tbody><<tr>马特 ; B, C; 桑迪 B; D; 查尔斯; C, D; 表类>
技巧是使用tidyr::separate_rows()
将数据移动到更长的格式。
一旦你所有的答案都被提取出来,很容易把它转回tidyr::pivot_wider()
的宽格式
library(tidyverse)
d <- tibble::tribble(
~Person, ~Answer,
"Matt", "A;B;C;",
"Sandy", "B;D;",
"Charles", "A;C;D;"
)
d |>
tidyr::separate_rows(Answer, sep = ";") |>
filter(Answer != "") |>
mutate(value = 1) |>
pivot_wider(
names_from = Answer,
values_from = value,
values_fill = 0
)
#> # A tibble: 3 x 5
#> Person A B C D
#> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 Matt 1 1 1 0
#> 2 Sandy 0 1 0 1
#> 3 Charles 1 0 1 1
由reprex包(v2.0.1)创建于2022-06-15