sql >> Databasteknik >  >> RDS >> Mysql

Konvertera IP-adress (IPv4) utan ett heltal i R

Du var inte helt specifik om vilken konvertering du ville ha, så jag multiplicerade decimalvärdena med vad jag trodde kunde passa (trodde att de tresiffriga posterna faktiskt var siffror motsvarade i "bas 256"-tal som sedan visades igen i bas 10). Om du ville att ordningen på platserna skulle vara omvänd, som jag har sett föreslagit någon annanstans, skulle du vända om indexeringen av "vals" i båda lösningarna

 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 är vanligtvis bättre IT-praxis att ange vad du tror är det korrekta svaret så att testning kan göras. Bertelsons kommentar ovan skulle vara snabbare och använder implicit 1000, 1000^2 och 1000^3 som faktorer.)

Jag är sugen på att förenkla koden men fruktar att behovet av att använda Reduce("+", ...) kan göra det mer komplicerat. Du kan inte använda sum eftersom det inte vektoriseras.

 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. Hämta en lista över privata procedurer/funktioner från en paketkropp

  2. Hur får man en radrepresentation av en genererad tabell?

  3. .NET SqlDependency med många meddelanden jämfört med högfrekvensundersökningar?

  4. orakel - vilka uttalanden måste göras?