Mysql
 sql >> база данни >  >> RDS >> Mysql

Преобразувайте IP адрес (IPv4) в цяло число в R

Не бяхте напълно конкретни относно това какво преобразуване искате, така че умножих десетичните стойности по това, което смятах за подходящо (мислейки си, че трицифрените елементи всъщност са еквиваленти на цифри в числа с "база 256", след което се показват отново в база 10). Ако искате редът на местоположенията да бъде обърнат, както видях да се предлага другаде, бихте обърнали индексирането на „vals“ и в двете решения

 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

(Обикновено е по-добра ИТ практика да посочите какво смятате за правилния отговор, за да може да се направи тестване. Коментарът на Bertelson по-горе би бил по-бърз и имплицитно използва 1000, 1000^2 и 1000^3 като фактори.)

Опитвам се да опростя кода, но се опасявам, че трябва да използвам Reduce("+", ...) може да го направи по-сложен. Не можете да използвате sum защото не е векторизиран.

 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL избира топ X записи за всеки индивид в таблицата

  2. Проблем при групиране

  3. Ruby mysql2 множество изрази в една заявка

  4. Търсете стойност в колоната BLOB в MySQL

  5. MySQL:как да индексираме клауза ИЛИ