首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列出dataframe to normal dataframe

列出dataframe to normal dataframe
EN

Stack Overflow用户
提问于 2016-05-27 11:43:02
回答 1查看 45关注 0票数 0

我有两个XML文件,我想将它们解析成R中的dataframe,然后进行合并。

将XML文件放入列出的dataframe中

代码语言:javascript
复制
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)

}

然后取消列表&执行合并,但我陷入了取消列表&合并不起作用……

代码语言:javascript
复制
df8 <- as.data.frame(lapply(df8, function(X) unname(unlist(X))))
merge(df8, df8, by = c("V5"))
str(df8, max.level = 1)

我附加了两个测试XML文件。它们是来自“作弊引擎”的地址转储

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

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

EN

回答 1

Stack Overflow用户

发布于 2016-05-27 13:44:22

我看过你的档案,里面似乎没有太多有趣的信息。

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

ID始终按1顺序排列,在第一个文件中从0到87,在第二个文件中从0到110。

描述始终是“”无描述“”。

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

VariableType始终为"4字节“。

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

考虑到以上所有情况,我不确定为什么要合并它们。在R中,“合并”通常意味着连接一个键上的行,但是我们从这两个文件中获得的数据集之间没有公共键。实际上,也许ID是有意义的,但考虑到您似乎在问题中尝试了"V5“,这似乎是不正确的。

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

另外,我建议避免使用xmlToList(),而是使用xpathApply()对CheatEntry节点进行有针对性的搜索,然后调用帮助器xmlToDataFrame()函数。这还允许我们使用xmlToDataFrame()colClassesstringsAsFactors参数来控制结果列的数据类型。

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

代码语言:javascript
复制
xmlFiles <- list.files(pattern='\\.CT$');
xmlFiles;
## [1] "CivilizationBE_DX11-6042.TXT.CT" "CivilizationBE_DX11-6122.TXT.CT"
res <- do.call(rbind,lapply(xmlFiles,function(xmlFile)
    xmlToDataFrame(
        xpathApply(xmlInternalTreeParse(xmlFile),'//CheatEntry'),
        c('integer','character','character','character','character'),
        stringsAsFactors=F
    )
));
head(res); tail(res);
##   ID      Description LastState VariableType  Address
## 1  0 "No description"                4 Bytes 0AEEE67C
## 2  1 "No description"                4 Bytes 0AEEE68C
## 3  2 "No description"                4 Bytes 0AF6E67C
## 4  3 "No description"                4 Bytes 0AF6E68C
## 5  4 "No description"                4 Bytes 0B827378
## 6  5 "No description"                4 Bytes 0B8992C8
##      ID      Description LastState VariableType  Address
## 194 105 "No description"                4 Bytes 25E7EAC4
## 195 106 "No description"                4 Bytes 25E7EAC8
## 196 107 "No description"                4 Bytes 25E7EAD4
## 197 108 "No description"                4 Bytes 2E15F970
## 198 109 "No description"                4 Bytes FF6A673C
## 199 110 "No description"                4 Bytes FFBCA308
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37474472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档