r语言 - 将带分隔符的字符串分割为虚拟变量



我们的目标是获取这样一个表:

<表类> 人 回答 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

最新更新