r-一个矢量的热编码列表



是否有一种快速的方法来对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

最新更新