xml到r中的数据帧

时间:2018-03-17 14:40:12

标签: r xml dataframe

我正在尝试将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)

产生错误:

  

错误:行的重复标识符....

我的方法是否正确,还是有其他方法可以实现这一目标?

2 个答案:

答案 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

由于现在可以将数据用作数据框,因此我们可以使用与数据框相关的功能来读取和操作文件。