【发布时间】:2021-10-22 23:58:00
【问题描述】:
我正在尝试读取许多 XML 文件并将其转换为 R 数据帧(或者最好是 Tibbles)。
不幸的是,当我尝试使用内置函数(例如来自 XML 包的 xmltodataframe 和来自 xmlconvert 包的 xml_to_df)转换文件时,我尝试过的所有 R 包(XML、flatxml、xmlconvert)都失败了,所以我有使用 XML2 手动完成。
这是我的问题,有一个小的工作示例:
# Minimal Working Example
library(tidyverse)
library(xml2)
interimxml <- read_xml("<Subdivision>
<Name>Charles</Name>
<Salary>100</Salary>
<Name>Laura</Name>
<Name>Steve</Name>
<Salary>200</Salary>
</Subdivision>")
names <- xml_text(xml_find_all(interimxml ,"//Subdivision/Name"))
salary <- xml_text(xml_find_all(interimxml ,"//Subdivision/Salary"))
names
salary
# combine in to tibble (doesn't work because of inequal vector lengths)
result <- tibble(names=names,
salary = salary)
result
rbind(names, salary)
从(组成的)XML 文件中,您可以看到 Charles 赚了 100 美元,Laura 一无所获(因为缺少条目,这是问题),Steve 赚了 200 美元。 p>
我想要 xml2 做的是,当查询名称和薪水节点时,当它找到一个名称但没有相应的薪水条目时返回一个“NA”(或零也可以),这样我就结束了像这样摆一张漂亮的桌子:
| Name | Salary |
|---|---|
| Charles | 100 |
| Laura | NA |
| Steve | 200 |
我知道我可以修改“xpath”以仅获取最后一个值(对于史蒂夫),这对我没有帮助,因为(在真实数据中)它也可能是第 100 或第 23 个人缺少工资信息。
[ 我知道工资号是作为字符值从 xml 文件中提取的。之后我会在列上进行变异(跨(薪水,as.double)。]
非常感谢任何帮助。非常感谢您。
【问题讨论】: