You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

R新手求助:将.dat文件转换为Data Frame的方法

解决.dat格式(Datex2 XML数据)转R Data Frame的问题

嘿,刚看到你碰到的难题啦——你读的这个.dat文件根本不是普通的表格数据!从你贴的输出就能看出来,它是Datex2格式的XML数据,这是交通领域常用的标准化格式,用readLines()读出来自然是一大串乱糟糟的标签,没法直接转成Data Frame。别慌,我给你一步步拆解怎么处理:

第一步:安装并加载XML解析工具

推荐用xml2包,它是R里处理XML更现代、更易用的工具。先安装并加载:

install.packages("xml2")
library(xml2)

第二步:正确读取XML文件

不用readLines(),直接用xml2read_xml()函数读取你的.dat文件:

# 读取XML格式的.dat文件
xml_data <- read_xml("Day8.dat")

第三步:解析XML,提取需要的字段

XML是层级结构的,我们需要用XPath定位到目标节点,再提取内容。比如从你的输出里,我们可以先提取situation相关的信息:

# 获取XML的命名空间(Datex2有专属命名空间,必须指定才能正确定位节点)
xml_namespaces <- xml_ns(xml_data)

# 定位所有的situation节点
situations <- xml_find_all(xml_data, ".//d2lm:situation", ns = xml_namespaces)

# 提取每个situation的ID(这是节点的属性,用xml_attr提取)
situation_ids <- xml_attr(situations, "id")

# 提取发布时间
publication_time <- xml_find_first(xml_data, ".//d2lm:publicationTime", ns = xml_namespaces) %>% xml_text()

# 提取每个situation的关注区域
area_of_interest <- xml_find_all(situations, ".//d2lm:areaOfInterest", ns = xml_namespaces) %>% xml_text()

第四步:把提取的内容组合成Data Frame

现在把这些提取出来的向量整合成你需要的Data Frame:

# 用基础R的data.frame也行,这里用dplyr的tibble更清晰
install.packages("dplyr")
library(dplyr)

df <- tibble(
  事件ID = situation_ids,
  发布时间 = publication_time,
  关注区域 = area_of_interest
)

# 查看最终的Data Frame
print(df)

小技巧:查看XML结构

如果你不确定要提取的字段在哪个层级,可以用xml_structure(xml_data)查看整个XML的结构,这样就能精准定位目标节点的XPath路径啦。

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

火山引擎 最新活动