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

Konverter IP-adresse (IPv4) uden et heltal i R

Du var ikke helt specifik med hensyn til, hvilken konvertering du ønskede, så jeg gangede decimalværdierne med, hvad jeg troede kunne passende (troede, at de tre-cifrede elementer faktisk var cifferækvivalenter i "base 256"-tal og derefter genvist i base 10). Hvis du ønskede, at rækkefølgen af ​​placeringerne skulle være omvendt, som jeg har set foreslået andetsteds, ville du vende indekseringen af ​​'vals' i begge løsninger

 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

(Det er normalt bedre it-praksis at specificere, hvad du mener er det rigtige svar, så test kan udføres. Bertelsons kommentar ovenfor ville være hurtigere og bruger implicit 1000, 1000^2 og 1000^3 som faktorerne.)

Jeg prøver at forenkle koden, men frygter, at det er nødvendigt at bruge Reduce("+", ...) kan gøre det mere komplekst. Du kan ikke bruge sum fordi det ikke er vektoriseret.

 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



  1. Brug af elasticsearch-river-mysql til at streame data fra MySQL-database til Elasticsearch

  2. Psychopg2 db-forbindelse hænger ved mistet netværksforbindelse

  3. Debezium flush timeout og OutOfMemoryError fejl med MySQL

  4. SOUNDEX() Funktion i Oracle