How to convert an integer number into binary vector using R?
For example :
number <- 11
[1] 1 0 1 1
what is the fastest possible method of conversion (using R code or some existing functions from packages) if I need to convert whole vector of numbers (minimum value = 0, maximum =300) into binary matrix ?
Follow the rabbit :
base::intToBits
To convert integer to binary, start with the integer in question and divide it by 2 keeping notice of the quotient and the remainder. Continue dividing the quotient by 2 until you get a quotient of zero. Then just write out the remainders in the reverse order. Here is an example of such conversion using the integer 12.
6 in binary is 110. Unlike the decimal number system where we use the digits 0 to 9 to represent a number, in a binary system, we use only 2 digits that are 0 and 1 (bits).
There's the intToBits
function that converts any integer to a vector of 32 raws, so you can do this:
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
This SO post suggests the intToBits
function. I define the function number2binary
, which includes an argument noBits
to control how many bits are returned. Standard is to return 32 bits.
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))]
}
}
And for some examples:
> 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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With