R多列之间的多热编码

标签 r one-hot-encoding dummy-variable

我的数据是这样的

Event Id Var1 Var2 Var3
1      a   x    w    y
2      a   z    y    w
3      b   x    y    q

我需要为表中的每一行创建多热编码向量,考虑到 Var1、Var2 和 Var3 中出现的所有值。 这意味着所需的输出将是:

Event Id  x  y  z  w  q
1      a  1  1  0  1  0
2      a  0  1  1  1  0
3      b  1  1  0  0  1

这意味着我保留初始数据集的相同行数,我只为每行添加等于 Var 1、Var 2 和 Var3 中所有唯一因子的列数。

我尝试了所有我能想到的方法,但到目前为止似乎没有任何效果......

有什么想法吗?

最佳答案

您可以使用data.table -

dt <- read.table(text="Event Id Var1 Var2 Var3
1      a   x    w    y
2      a   z    y    w
3      b   x    y    q",header=T)

setDT(dt)
dcast(setDT(melt(dt,id.vars = c("Event","Id")))[,ind:=1],Event+Id~value,value.var = "ind",fill=0)

输出-

   Event Id Var1 Var2 Var3 q w x y z
1:     1  a    1    1    1 0 1 1 1 0
2:     2  a    1    1    1 0 1 0 1 1
3:     3  b    1    1    1 1 0 1 1 0

关于R多列之间的多热编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55288338/

相关文章:

python - 如何在字符级别对句子矩阵进行单热编码?

python - 如何在 sklearn 中使用 OneHotEncoder 的输出?

python - 在 Python 的 for 循环中使用 pd.get_dummies 创建虚拟变量

r - 使用等级 (R) 处理关系

r - 如何更改和/或分离 r 图形图例中的组件?

r - dplyr::mutate_at 遍历函数中的列

r - 是否有用于模块化报告生成的\SweaveInput{} 的 R markdown 模拟?

Python SciKit Learn 和 Pandas 分类数据

r - 从相互排斥的虚拟变量创建分类变量

r - 如何在 knitr 中隐藏来自 ggplot 的消息