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)
这是一种方式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)
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |