将数字变量转换为二进制列

时间:2018-10-16 14:34:48

标签: r binary data.table numeric

假设我在R中有以下数据表:

DT <- data.table::data.table(y=runif(1e4), x1=rnorm(1e4), x2=as.factor(sample(1:11,1e4,TRUE)))

由于x2取值1到11,所以11的最大二进制表示为1011,所以4列就足够了,我想将x2转换为4个二进制列,这样:

y           x1        x2   b1  b2  b3  b4
0.17438022  0.1925023  11  1    0  1   1
0.34850700  1.0412363  3   0    0  1   1

如何在R中做到这一点?

1 个答案:

答案 0 :(得分:0)

  • 对于转换部分,我使用了THIS答案。

  • 已由您提供。 DT必须是data.table。


binarys <-
sapply(
    as.numeric(as.character(DT$x2)), function(x) {
        sub(".*(?=.{4}$)", "",
        paste(rev(as.integer(intToBits(x))), collapse=""),
        perl = T)
    })

DT[,c(c(DT), tstrsplit(binarys,""))]

#            y         x1 x2 V4 V5 V6 V7
#1: 0.09963794  0.2799082  8  1  0  0  0
#2: 0.04547423 -0.8783603 11  1  0  1  1
#3: 0.41489062 -0.8319349 10  1  0  1  0
#4: 0.96606376  0.6323427  3  0  0  1  1
#5: 0.50516936 -0.5751176 11  1  0  1  1

sub(".*(?=.{4}$)" ...用于删除除最后4位数字以外的所有内容。如果您的人数越来越多,则可能需要对此进行调整。