假设我在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中做到这一点?
答案 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位数字以外的所有内容。如果您的人数越来越多,则可能需要对此进行调整。