【问题标题】:Convert numeric variable into binary columns [duplicate]将数值变量转换为二进制列[重复]
【发布时间】:2018-10-16 23:17:06
【问题描述】:

假设我在 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 中做到这一点?

【问题讨论】:

标签: r binary data.table numeric


【解决方案1】:
  • 对于转换部分,我使用了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 位之外的所有内容。如果您的数字变大,您可能需要对此进行调整。

【讨论】:

    猜你喜欢
    • 2017-03-23
    • 2017-03-19
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 2014-03-28
    • 1970-01-01
    相关资源
    最近更新 更多