是否有一种快速的方法来对R中的向量(具有不同长度(列表进行热编码,最好使用tidyverse?
例如:
vals <- list(a=c(1), b=c(2,3), c=c(1,2))
想要的结果是一个宽的数据帧:
1 2 3
a 1 0 0
b 0 1 1
c 1 1 0
谢谢!
我们可以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
一个base R
选项可以是:
t(table(stack(vals)))
values
ind 1 2 3
a 1 0 0
b 0 1 1
c 1 1 0
基本R方法,
do.call(rbind, lapply(vals, function(i) as.integer(!is.na(match(unique(unlist(vals)), i)))))
# [,1] [,2] [,3]
#a 1 0 0
#b 0 1 1
#c 1 1 0