Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to convert integer number into binary vector?

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

like image 963
Qbik Avatar asked Aug 23 '12 08:08

Qbik


People also ask

How do you convert integer to binary representation?

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.

How do you represent 6 in binary?

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).


2 Answers

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 
like image 51
digEmAll Avatar answered Sep 22 '22 17:09

digEmAll


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
like image 21
Paul Hiemstra Avatar answered Sep 25 '22 17:09

Paul Hiemstra