Qbi*_*bik 20 binary integer r numeric binary-data
如何使用R将整数转换为二进制向量?
例如 :
number <- 11
[1] 1 0 1 1
Run Code Online (Sandbox Code Playgroud)
如果我需要将整个数字向量(最小值= 0,最大值= 300)转换为二进制矩阵,那么最快的转换方法(使用R代码或包中的一些现有函数)是什么?
dig*_*All 25
有一个intToBits函数可以将任何整数转换为32个raw的向量,所以你可以这样做:
decimals <- c(3,5,11,4)
m <- sapply(decimals,function(x){ as.integer(intToBits(x))})
m
> m
[,1] [,2] [,3] [,4]
[1,] 1 1 1 0
[2,] 1 0 1 0
[3,] 0 1 0 1
[4,] 0 0 1 0
[5,] 0 0 0 0
[6,] 0 0 0 0
[7,] 0 0 0 0
[8,] 0 0 0 0
[9,] 0 0 0 0
[10,] 0 0 0 0
[11,] 0 0 0 0
[12,] 0 0 0 0
[13,] 0 0 0 0
[14,] 0 0 0 0
[15,] 0 0 0 0
[16,] 0 0 0 0
[17,] 0 0 0 0
[18,] 0 0 0 0
[19,] 0 0 0 0
[20,] 0 0 0 0
[21,] 0 0 0 0
[22,] 0 0 0 0
[23,] 0 0 0 0
[24,] 0 0 0 0
[25,] 0 0 0 0
[26,] 0 0 0 0
[27,] 0 0 0 0
[28,] 0 0 0 0
[29,] 0 0 0 0
[30,] 0 0 0 0
[31,] 0 0 0 0
[32,] 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
Pau*_*tra 20
这篇SO帖子暗示了这个intToBits功能.我定义了函数number2binary,它包含一个参数noBits来控制返回多少位.标准是返回32位.
number2binary = function(number, noBits) {
binary_vector = rev(as.numeric(intToBits(number)))
if(missing(noBits)) {
return(binary_vector)
} else {
binary_vector[-(1:(length(binary_vector) - noBits))]
}
}
Run Code Online (Sandbox Code Playgroud)
而对于一些例子:
> number2binary(11)
[1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1
> number2binary(11, 4)
[1] 1 0 1 1
Run Code Online (Sandbox Code Playgroud)
小智 7
我在MJ Crawley的"The R Book"中找到的解决方案是以下功能:
binary <- function(x) {
i <- 0
string <- numeric(32)
while(x > 0) {
string[32 - i] <- x %% 2
x <- x %/% 2
i <- i + 1
}
first <- match(1, string)
string[first:32]
}
Run Code Online (Sandbox Code Playgroud)
小智 6
试试CRAN包"binaryLogic"
library(binaryLogic)
as.binary(11)
[1] 1 0 1 1
as.binary(11, littleEndian=TRUE)
[1] 1 1 0 1
as.binary(42, n=16)
[1] 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0
as.binary(0:2, n=2)
[[1]]
[1] 0 0
[[2]]
[1] 0 1
[[3]]
[1] 1 0
as.binary(0xFF)
[1] 1 1 1 1 1 1 1 1
Run Code Online (Sandbox Code Playgroud)
也可用:shift,rotate,graycode等.
您可以使用以下功能,基于intToBit:
intToBitVect <- function(x){
tmp <- rev(as.numeric(intToBits(x)))
id <- seq_len(match(1,tmp,length(tmp))-1)
tmp[-id]
}
Run Code Online (Sandbox Code Playgroud)
第一行将intToBits输出转换为数字0和1,并将顺序放置.第二行检查需要保留的值,如下所示:
match.如果没有找到1,则要求match返回tmp向量的长度.seq_len1)与前一次到第一次出现的位置1在tmp矢量tmp向量中的所有位置显示它的工作原理:
> intToBitVect(11)
[1] 1 0 1 1
> intToBitVect(0)
[1] 0
Run Code Online (Sandbox Code Playgroud)