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

在R语言中拆分CSV的track列生成lat、lon列的方法求助

拆分CSV中track字段为lat和lon列的解决方案

需求描述

处理CSV数据时,track字段存储了多个坐标点的字符串(类列表结构),需要将该字段拆分,替换为lat和lon两列,每个坐标点对应一行数据,同时保留原数据的其他字段(如startTime、endTime等)。

当前数据结构

df <- structure(list(startTime = 1673652576000, endTime = 1673652605000, 
    track = "Any[Dict{String, Any}(\"lat\" => 47.38113329424818, \"lon\" => 8.488552397519989), Dict{String, Any}(\"lat\" => 47.38115806843576, \"lon\" => 8.488606700331793), Dict{String, Any}(\"lat\" => 47.38117942217475, \"lon\" => 8.488750238611077), Dict{String, Any}(\"lat\" => 47.381191813557656, \"lon\" => 8.488831542342021), Dict{String, Any}(\"lat\" => 47.38119496242752, \"lon\" => 8.48889035827453), Dict{String, Any}(\"lat\" => 47.381129867348655, \"lon\" => 8.488894804346009), Dict{String, Any}(\"lat\" => 47.38110967635605, \"lon\" => 8.488808354980387), Dict{String, Any}(\"lat\" => 47.381089123104935, \"lon\" => 8.48873929104632), Dict{String, Any}(\"lat\" => 47.381083177776155, \"lon\" => 8.488731425037434), Dict{String, Any}(\"lat\" => 47.38105863930372, \"lon\" => 8.48866144565764), Dict{String, Any}(\"lat\" => 47.381069428672866, \"lon\" => 8.488639684187174), Dict{String, Any}(\"lat\" => 47.38105328464012, \"lon\" => 8.48861185403874), Dict{String, Any}(\"lat\" => 47.38101967503413, \"lon\" => 8.488536802144624)]", 
    distance = 64, transitMode = "walk", oldTransitMode = ""), row.names = 1L, class = "data.frame")

解决方案(R语言)

使用dplyr、stringr和jsonlite包处理字符串解析与数据展开:

# 加载依赖包
library(dplyr)
library(stringr)
library(jsonlite)
library(tidyr)

# 处理track字段并拆分数据
df_clean <- df %>%
  mutate(
    # 将非标准格式字符串转换为JSON格式
    track_json = str_replace_all(track, "Any\\[", "["),
    track_json = str_replace_all(track_json, "Dict\\{String, Any\\}\\(", "{"),
    track_json = str_replace_all(track_json, "\\)", "}"),
    track_json = str_replace_all(track_json, "=>", ":"),
    # 解析JSON为列表
    track_list = lapply(track_json, fromJSON)
  ) %>%
  # 将列表展开为多行数据
  unnest(track_list) %>%
  # 整理列名并移除临时列
  select(startTime, endTime, lat = track_list.lat, lon = track_list.lon, distance, transitMode, oldTransitMode)

# 查看处理结果
print(df_clean)

代码说明

  1. 格式转换:将track字段中的非标准格式(如Any[、Dict{String, Any}(、=>)替换为标准JSON格式,方便后续解析。
  2. 解析列表:用jsonlite::fromJSON将转换后的字符串解析为坐标点列表。
  3. 展开数据:用tidyr::unnest将每个列表中的坐标点拆分为单独的行,同时复制原数据的其他字段。
  4. 整理列名:将解析后的坐标列重命名为lat和lon,并保留需要的字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 09:21:00