一个热编码向量列表

Jos*_*ira 5 r tidyverse

有没有一种快速的方法来对 R 中的向量列表(具有不同的长度)进行一次性编码,最好使用 tidyverse?

例如:

vals <- list(a=c(1), b=c(2,3), c=c(1,2))
Run Code Online (Sandbox Code Playgroud)

想要的结果是一个宽数据框:

   1   2   3
a  1   0   0
b  0   1   1
c  1   1   0
Run Code Online (Sandbox Code Playgroud)

谢谢!

Ron*_*hah 8

我们可以enframe列出列表并将它们转换为单独的行,创建一个虚拟列并使用pivot_wider.

library(tidyverse)

enframe(vals) %>%
  unnest(value) %>%
  mutate(temp = 1) %>%
  pivot_wider(names_from = value, values_from = temp, values_fill = list(temp = 0))

#  name    `1`   `2`   `3`
#  <chr> <dbl> <dbl> <dbl>
#1 a         1     0     0
#2 b         0     1     1
#3 c         1     1     0
Run Code Online (Sandbox Code Playgroud)