将数字编码为分类向量

Hen*_*ski 3 r list one-hot-encoding

我有一个整数向量,y <- c(1, 2, 3, 3)现在我想把它转换成这样的列表(一个热编码):

1 0 0 
0 1 0
0 0 1
0 0 1
Run Code Online (Sandbox Code Playgroud)

我试图找到一个带有to_categorical的解决方案,但我遇到了数据类型的问题......有谁知道这项任务的智能和流畅的解决方案?

这是我的尝试:

 for (i in 1:length(y)) {
  one_character <- list(as.vector(to_categorical(y[[i]], num_classes = 3)))
  list_test <- rbind(list_test, one_character)
  }
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

Error in py_call_impl(callable, dots$args, dots$keywords) : 
  IndexError: index 3 is out of bounds for axis 1 with size 3
Run Code Online (Sandbox Code Playgroud)

akr*_*run 5

这是一种方式base R.创建一个matrix0并根据行序列分配1,将y值分配为列索引

m1 <- matrix(0, length(y), max(y))
m1[cbind(seq_along(y), y)] <- 1
m1
#      [,1] [,2] [,3]
#[1,]    1    0    0
#[2,]    0    1    0
#[3,]    0    0    1
#[4,]    0    0    1
Run Code Online (Sandbox Code Playgroud)

base R,我们也可以做

table(seq_along(y), y)
#  y
#    1 2 3
#  1 1 0 0
#  2 0 1 0
#  3 0 0 1
#  4 0 0 1
Run Code Online (Sandbox Code Playgroud)

或者另一种选择model.frame来自base R

model.matrix(~factor(y) - 1)
Run Code Online (Sandbox Code Playgroud)