sql >> Database >  >> RDS >> Mysql

Converteer IP-adres (IPv4) het is geen geheel getal in R

Je was niet helemaal specifiek over welke conversie je wilde, dus vermenigvuldigde ik de decimale waarden met wat ik dacht dat geschikt zou zijn (in de veronderstelling dat de driecijferige items eigenlijk cijferequivalenten waren in "basis 256" -getallen en vervolgens opnieuw weergegeven in basis 10). Als u wilt dat de volgorde van de locaties wordt omgekeerd, zoals ik elders heb gesuggereerd, zou u de indexering van 'vals' in beide oplossingen omkeren

 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

(Het is meestal een betere IT-praktijk om te specificeren wat u denkt dat het juiste antwoord is, zodat testen kan worden gedaan. Bertelsons opmerking hierboven zou sneller zijn en gebruikt impliciet 1000, 1000^2 en 1000^3 als de factoren.)

Ik probeer de code te vereenvoudigen, maar vrees dat de noodzaak om Reduce("+", ...) te gebruiken kan het complexer maken. U kunt sum niet gebruiken omdat het niet gevectoriseerd is.

 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. ORA-907 ontbreekt rechterhaakje bij gebruik van AS-trefwoord

  2. Dapper gebruiken met SQL Spatial Types als parameter

  3. resultaatset van functie retourneren

  4. Hoeveel gelijke dagen liggen tussen twee datumbereiken, SQL