Mysql
 sql >> Base de données >  >> RDS >> Mysql

Convertir l'adresse IP (IPv4) en un entier dans R

Vous n'étiez pas tout à fait précis sur la conversion que vous vouliez, j'ai donc multiplié les valeurs décimales par ce que je pensais être approprié (en pensant que les éléments à trois chiffres étaient en fait des équivalents de chiffres dans les nombres "base 256" puis réaffichés en base 10). Si vous vouliez que l'ordre des emplacements soit inversé, comme je l'ai vu suggéré ailleurs, vous inverseriez l'indexation des 'vals' dans les deux 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

(Il est généralement préférable de spécifier ce que vous pensez être la bonne réponse afin que le test puisse être effectué. Le commentaire de Bertelson ci-dessus serait plus rapide et utilise implicitement 1000, 1000^2 et 1000^3 comme facteurs.)

Je tente de simplifier le code mais je crains que la nécessité d'utiliser Reduce("+", ...) peut le rendre plus complexe. Vous ne pouvez pas utiliser sum car il n'est pas vectorisé.

 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