伪代码/R中小于2级的变量的一个热编码

伪代码/R中小于2级的变量的一个热编码,r,dataframe,dplyr,data.table,purrr,R,Dataframe,Dplyr,Data.table,Purrr,我试图用混合(数值+因子)变量对数据帧进行虚拟编码。但是,model.matrix不适用于级别小于2的变量 样本数据- dt <- data.frame(A=c("1","1","1"), B=c("0","1","1"), C=c("5","6","7"), id=c(1,2,3)) 我的尝试- dt_res <- model.matrix(~.+0,dt) dt_res使用d

我试图用混合(数值+因子)变量对数据帧进行虚拟编码。但是,model.matrix不适用于级别小于2的变量

样本数据-

dt <- data.frame(A=c("1","1","1"),
                 B=c("0","1","1"),
                 C=c("5","6","7"),
                 id=c(1,2,3))
我的尝试-

dt_res <- model.matrix(~.+0,dt)

dt_res使用
data.table
,您可以先熔化,然后再将其铸造成所需的宽格式:

library(data.table)
setDT(dt)
cols <- names(dt[, -"id"])
dcast(
    melt(dt[, c(.(id=id), lapply(cols, function(x) paste0(x, get(x))))], id.vars="id"), 
    id ~ value,
    length)
数据:


dt使用
data.table
,您可以先熔化,然后再将其铸造成所需的宽格式:

library(data.table)
setDT(dt)
cols <- names(dt[, -"id"])
dcast(
    melt(dt[, c(.(id=id), lapply(cols, function(x) paste0(x, get(x))))], id.vars="id"), 
    id ~ value,
    length)
数据:


dt
mltools::one_hot
是否支持小于2个级别的因子变量?
mltools::one_hot
是否支持小于2个级别的因子变量?
   id A1 B0 B1 B2 C5 C6 C7
1:  1  1  1  0  0  1  0  0
2:  2  1  0  1  0  0  1  0
3:  3  1  0  0  1  0  0  1
dt <- data.frame(A=c("1","1","1"),
    B=c("0","1","2"),
    C=c("5","6","7"),
    id=c(1,2,3))