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

如何在R语言中按站点名称分组数据框并实现代码复用

自动按站点分组生成中心坐标地图解决方案

步骤说明

  1. 加载并安装必要的R包,新增dplyr用于数据分组和处理
  2. 替换手动分组代码,通过dplyr自动按站点名称分组并生成兼容原有代码的命名列表
  3. 保留原有生成中心坐标和绘制地图的逻辑,确保功能不变

完整代码

# 包含dplyr用于数据分组处理
pack <- c("tidyr", "leaflet", "fontawesome", "glue", "sf", "mapview", "sp", "magrittr", "htmltools", "dplyr")
new.packages <- pack[!(pack %in% installed.packages()[,"Package"])]
if(length(new.packages)) install.packages(new.packages)
lapply(pack, library, character.only = TRUE)

# 自动按站点名称分组(替换原手动分组代码)
# 注意:请将`station_name`替换为你数据中存储站点名称的列名
stations_list <- data %>%
  # 可选:去除同一站点的重复经纬度记录(根据实际数据情况选择是否启用)
  distinct(station_name, .keep_all = TRUE) %>%
  # 按站点名称分组
  group_by(station_name) %>%
  # 将每组数据嵌套为数据框
  nest() %>%
  # 转换为命名列表,格式与原手动列表完全一致
  deframe()

# 3和2对应数据库中的经度、纬度列,请根据实际列位置调整
create_central_point <- function(df) {
  pts <- st_as_sf(df, coords = c(3, 2), crs = 4326)
  centroid <- st_sf(geometry = st_sfc(st_centroid(st_union(pts))))
  return(centroid)
}

stations_sf <- lapply(stations_list, create_central_point)

coords <- lapply(stations_sf, function(x) st_coordinates(x))
stations_coords <- data.frame(
  name = names(coords),
  lon = sapply(coords, function(x) x[1]),
  lat = sapply(coords, function(x) x[2])
)
# 绘制站点中心坐标地图
leaflet(stations_coords) %>%
  addTiles() %>%
  addAwesomeMarkers(
    lng = ~lon,
    lat = ~lat,
    icon = awesomeIcons(icon = "star", markerColor = "red", iconColor = "yellow"),
    label = ~name
  )

关键修改说明

  • 自动分组逻辑:通过dplyr的group_by+nest+deframe组合,无需手动指定行号即可自动按站点名称生成命名列表,完全兼容原有代码的后续处理流程
  • 去重功能:使用distinct去除同一站点的重复坐标记录,优化数据质量(可根据实际数据情况决定是否保留该步骤)
  • 可复用性:只需修改站点名称列名station_name和经纬度列位置c(3,2),即可适配不同结构的数据集

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 03:08:11