You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中将IP地址列转换为城市名?求可行方案

可行的IP地址转城市名解决方案

方案1:使用ipapi包(调用免费API)

依赖免费的ipapi.co接口,无需本地数据库,适合中小规模IP解析。

  • 安装并加载包:
install.packages("ipapi")
library(ipapi)
  • 批量转换示例:
    假设你的数据框为df,IP列名为ip_address:
# 构造示例数据
df <- data.frame(ip_address = c("8.8.8.8", "1.1.1.1", "202.108.22.5"))

# 批量获取地理位置信息
geo_result <- ipapi_batch(df$ip_address)

# 提取城市名并合并到原数据框
df$city <- geo_result$city

注意:免费API单IP限制请求次数,大量IP建议分批处理。

方案2:使用maxminddb包(本地数据库解析)

基于MaxMind免费的GeoLite2 City数据库,本地解析无请求限制,适合大规模IP处理。

  • 步骤:
  1. 注册MaxMind账号后下载GeoLite2 City数据库(免费),解压得到.mmdb格式文件
  2. 安装并加载包:
install.packages("maxminddb")
library(maxminddb)
  1. 编写解析函数批量处理:
# 指定本地数据库路径
db_path <- "你的GeoLite2-City.mmdb文件路径"

# 定义IP转城市的函数
get_city <- function(ip) {
  geo_info <- read_mmdb(ip, db_path)
  return(geo_info$city$names$en)
}

# 批量处理IP列
df$city <- sapply(df$ip_address, get_city)

方案3:用httr手动调用免费API

无需额外专用包,直接通过HTTP请求解析IP:

install.packages("httr")
install.packages("jsonlite")
library(httr)
library(jsonlite)

# 定义解析函数
get_city_from_ip <- function(ip) {
  api_response <- GET(paste0("http://ip-api.com/json/", ip))
  if (http_status(api_response)$category == "Success") {
    result_data <- fromJSON(content(api_response, "text"))
    return(result_data$city)
  } else {
    return(NA)
  }
}

# 批量转换
df$city <- sapply(df$ip_address, get_city_from_ip)

注意:ip-api.com免费版限制每分钟45次请求,大量IP需控制请求速率。

内容的提问来源于stack exchange,提问作者jjjj233333

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 19:45:43