将数据帧列入正常数据帧

时间:2016-05-27 03:43:02

标签: r xml dataframe

我有两个XML文件,我想将其解析为R中的数据框 然后进行合并。

将XML文件导入列出的数据框

def foo():
    l = []
    with open("file.asd", "r") as f:
        for line in f:
            l.append(line)
    return l

然后将其取消列出&合并,但我被困在unlist&合并不起作用......

library(XML)
library(plyr)

getxmldf<-function(xmlfile){

  booksz <- xmlTreeParse(xmlfile)
  xmldf<-ldply(xmlToList(booksz), data.frame)
  xmldf.T <- t(xmldf[,2:ncol(xmldf)])
  return(xmldf.T)

}

我附加了两个测试XML文件。它们是&#34; Cheat Engine&#34;

的地址转储

https://drive.google.com/file/d/0BxCrQYKS04mRV1ZEZ1Bza2Vabkk/view?usp=sharing

https://drive.google.com/file/d/0BxCrQYKS04mRRWJUVjdqRUp3Yk0/view?usp=sharing

1 个答案:

答案 0 :(得分:0)

我已经查看了您的文件,但他们似乎并没有很多有趣的信息。

在每个文件中有许多CheatEntry节点,每个节点包含5个节点:ID,Description,LastState,VariableType和Address。

ID总是按1顺序排列,第一个文件中的0到87,第二个文件中的0到110.

说明始终是&#39;&#34;没有说明&#34;&#39;。

LastState始终为空。它有两个属性:第一个文件中的值始终为6042,第二个文件中的值为6122,RealAddress始终与“地址”节点相同。因此,这两个属性都没有任何真实的信息要提供。

VariableType始终是&#34; 4字节&#34;。

地址有一个8位十六进制字符串,在两个文件之间和之间始终是唯一的。

考虑到上述所有情况,我不确定你为什么要合并它们。在R中,&#34;合并&#34;通常意味着加入键上的行,但是我们从这两个文件中获取的数据集之间没有共同的键。实际上,也许ID可能有意义,但鉴于你似乎已经尝试过&#34; V5&#34;在你的问题中,这似乎不正确。

我假设您希望按行合并两个data.frames,这可以通过rbind()函数完成。我们可以使用lapply()一次性处理这两个文件,然后使用do.call()在每个文件data.frames上调用单个rbind()调用。

另外,我建议避免xmlToList()支持使用xpathApply()对CheatEntry节点进行目标搜索,然后调用辅助xmlToDataFrame()函数。这样我们还可以使用colClasses的{​​{1}}和stringsAsFactors参数来控制结果列的数据类型。

把所有这些放在一起,我们有:

xmlToDataFrame()