Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Konvertieren Sie die IP-Adresse (IPv4) in eine ganze Zahl in R

Sie waren nicht ganz genau, welche Konvertierung Sie wollten, also multiplizierte ich die Dezimalwerte mit dem, was ich für angemessen hielt (ich dachte, die dreistelligen Elemente waren tatsächlich Ziffernäquivalente in "Basis 256" -Zahlen, die dann in Basis 10 erneut angezeigt wurden). Wenn Sie möchten, dass die Reihenfolge der Speicherorte umgekehrt wird, wie ich an anderer Stelle vorgeschlagen habe, würden Sie die Indizierung von „vals“ in beiden Lösungen umkehren

 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

(Es ist normalerweise besser, die Ihrer Meinung nach richtige Antwort anzugeben, damit Tests durchgeführt werden können. Der obige Kommentar von Bertelson wäre schneller und verwendet implizit 1000, 1000^2 und 1000^3 als Faktoren.)

Ich versuche, den Code zu vereinfachen, befürchte aber, dass die Verwendung von Reduce("+", ...) erforderlich ist kann es komplexer machen. Sie können sum nicht verwenden weil es nicht vektorisiert ist.

 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