R快速XML解析
目前在R中将
XML文件转换为数据帧的最快方法是什么?
XML看起来像这样:(注意 – 并非所有行都包含所有字段) <row> <ID>001</ID> <age>50</age> <field3>blah</field3> <field4 /> </row> <row> <ID>001</ID> <age>50</age> <field4 /> </row> 我尝试了两种方法: > XML库中的xmlToDataFrame函数 对于8.5 MB文件,1.6k“行”和114“列”,xmlToDataFrame花了25.1秒,而xmlToDF在我的机器上花了16.7秒. 与python XML解析器(例如.xml.etree.ElementTree)相比,这些时间非常大,能够在0.4秒内完成工作. 在R中有没有更快的方法来做到这一点,或者R中是否存在一些阻碍我们加快速度的基础? 对此有所了解真的很有帮助!
更新了评论
d = xmlRoot(doc) size = xmlSize(d) names = NULL for(i in 1:size){ v = getChildrenStrings(d[[i]]) names = unique(c(names,names(v))) } for(i in 1:size){ v = getChildrenStrings(d[[i]]) cat(paste(v[names],collapse=","),"n",file="a.csv",append=TRUE) } 对于1000×100 xml记录,这将在大约0.4秒内完成.如果你知道变量名,你甚至可以省略第一个for循环. 注意:如果xml内容包含逗号,引号,则可能需要特别注意它们.在这种情况下,我建议使用下一个方法. 如果要动态构造data.frame,可以使用data.table执行此操作,data.table比上面的csv方法慢一点,但比data.frame快 m = data.table(matrix(NA,nc=length(names),nr=size)) setnames(m,names) for (n in names) mode(m[[n]]) = "character" for(i in 1:size){ v = getChildrenStrings(d[[i]]) m[i,names(v):= as.list(v),with=FALSE] } for (n in names) m[,n:= type.convert(m[[n]],as.is=TRUE),with=FALSE] 对于同一份文件,它在大约1.1秒内完成. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |