Mysql
 sql >> Database >  >> RDS >> Mysql

Converti l'indirizzo IP (IPv4) in un numero intero in R

Non eri del tutto specifico su quale conversione volevi, quindi ho moltiplicato i valori decimali per ciò che ritenevo appropriato (pensando che gli elementi a tre cifre fossero in realtà equivalenti di cifre nei numeri "base 256" quindi rivisualizzati in base 10). Se volessi invertire l'ordine delle posizioni, come ho visto suggerito altrove, invertiresti l'indicizzazione di "vals" in entrambe le soluzioni

 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

(Di solito è migliore prassi IT specificare quale ritieni sia la risposta corretta in modo da poter eseguire il test. Il commento di Bertelson sopra sarebbe più veloce e utilizza implicitamente 1000, 1000^2 e 1000^3 come fattori.)

Sto cercando di semplificare il codice ma temo che sia necessario utilizzare Reduce("+", ...) potrebbe renderlo più complesso. Non puoi usare sum perché non è vettorizzato.

 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