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