我正在尝试将xml内容转换为DataFrame。 xml如下:
<group>
<data>
<metadata>
<meta content="6 cyl" name="engine"/>
<meta content="55" name="mpg"/>
<meta content="2700" name="weight"/>
</metadata>
</data>
<data>
<metadata>
<meta content="3 cyl" name="engine"/>
<meta content="65" name="mpg"/>
<meta content="2420" name="weight"/>
</metadata>
</data>
</group>
我希望DataFrame如下:
engine mpg weight
6 cyl 55 2700
3 cyl 65 2400
我试过了:
data <- read_xml("myFile.xml")
meta <- data %>% xml_find_all("//meta")
df <- data.frame(name = sapply(meta %>% xml_attr("name"), as.character),
content = sapply(meta %>% xml_attr("content"), as.character))
但它产生了这个DataFrame:
name content
engine 6 cyl
mpg 55
weight 2700
engine 3 cyl
mpg 65
体重2420
...然后
df <- df %>% spread(unique(name), content)
产生错误:
错误:行的重复标识符....
我的方法是否正确,还是有其他方法可以实现这一目标?
答案 0 :(得分:0)
Spread要求每一行都有唯一的标识符。这里有一些很好的讨论https://community.rstudio.com/t/spread-why-errors/2076/3
这可以给你你想要的东西:
df %>% group_by(name) %>% mutate(id = row_number()) %>%
spread(name, content) %>% select(-id)
答案 1 :(得分:0)
XML to Data Frame 为了有效处理大型文件中的数据,我们将xml文件中的数据作为数据帧读取。然后处理数据 数据分析框架。
# Load the packages required to read XML files.
library("XML")
library("methods")
# Convert the input xml file to a data frame.
xmldataframe <- xmlToDataFrame("input.xml")
print(xmldataframe)
当我们执行上面的代码时,它会产生以下结果-
engine mpg weight
6 cyl 55 2700
3 cyl 65 2400
由于现在可以将数据用作数据框,因此我们可以使用与数据框相关的功能来读取和操作文件。