Convert IP address (IPv4) itno an Integer in R

后端 未结 1 1944
心在旅途
心在旅途 2021-01-14 03:41

I was looking for a way to write a function in R which converts an IP address into an integer.

My dataframe looks like this:

total  IP
626    189.14.         


        
相关标签:
1条回答
  • 2021-01-14 04:32

    You were not entirely specific about what conversion you wanted, so I multiplied the decimal values by what I thought might appropriate (thinking the three digit items were actually digit equivalents in "base 256" numbers then redisplayed in base 10). If you wanted the order of the locations to be reversed, as I have seen suggested elsewhere, you would reverse the indexing of 'vals' in both solutions

     convIP <- function(IP) { vals <- read.table(text=as.character(IP), sep=".")
                   return( vals[1] + 256*vals[2] + 256^2*vals[3] + 256^3*vals[4]) }
    
    > convIP(dat$IP)
              V1
    1 2476281533
    2  134990147
    3 2352289344
    4  173345204
    5 2122844258
    6 1153107520
    

    (It's usually better IT practice to specify what you think to be the correct answer so testing can be done. Bertelson's comment above would be faster and implicitly uses 1000, 1000^2 and 1000^3 as the factors.)

    I am taking a crack at simplifying the code but fear that the need to use Reduce("+", ...) may make it more complex. You cannot use sum because it is not vectorized.

     convIP <- function(IP) { vals <- read.table(text=as.character(IP), sep=".")
                    return( Reduce("+", vals*256^(3:0))) }
    
    > convIP(dat$IP)
    [1] 5737849088    5112017 2717938944    1245449 3925902848   16449610
    
    0 讨论(0)
提交回复
热议问题