有没有一种快速的方法来对 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)
谢谢!
我们可以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)