sql >> Databáze >  >> RDS >> Mysql

Převeďte IP adresu (IPv4) na celé číslo v R

Nebyli jste úplně konkrétní ohledně toho, jaký převod chcete, takže jsem vynásobil desetinné hodnoty tím, co jsem považoval za vhodné (myslel jsem si, že třímístné položky byly ve skutečnosti ekvivalenty číslic v číslech se „základem 256“ a poté znovu zobrazeny v základu 10). Pokud byste chtěli, aby bylo pořadí umístění obráceno, jak jsem viděl na jiném místě, obrátili byste indexování 'vals' v obou řešeních

 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

(Obvykle je lepší IT praxí specifikovat, co považujete za správnou odpověď, aby bylo možné provést testování. Bertelsonův komentář výše by byl rychlejší a implicitně používá jako faktory 1000, 1000^2 a 1000^3.)

Dělám trhliny ve zjednodušení kódu, ale obávám se, že je potřeba použít Reduce("+", ...) může to udělat složitější. Nemůžete použít sum protože to není vektorizované.

 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. Získání oprávnění ke spuštění xp_cmdshell

  2. fond připojení node.js a mysql se neexportuje

  3. SQL – Pokročilé odstraňování duplicit pomocí ID NOT IN

  4. Výpočet vážené průměrné ceny zásob produktů