我必须处理一个名为ul的丑名单,如下所示:
[[1]] [[1]]$param name value "Section" "1" [[1]]$param name value "field" "1" [[1]]$param name value "final answer" "1" [[1]]$param name value "points" "-0.0" [[2]] [[2]]$param name value "Section" "1" [[2]]$param name value "field" "2" [[2]]$param name value "final answer" "1" [[2]]$param name value "points" "1.0" [[3]] [[3]]$param name value "Section" "1" [[3]]$param name value "field" "3" [[3]]$param name value "final answer" "0.611" [[3]]$param name value "points" "1.0"
我想将列表转换成一个简单的数据框,即
Section field final answer points 1 1 1 -0.0 1 2 1 1.0 1 3 0.611 1.0
有没有直接的方法来实现呢?或者我必须单独访问每个列表并将其绑定到数据框?
数据是从一个更加恶劣的xml文件导入的,所以如果有人想玩它,那里有一个链接到@L_502_0@.对不起,没有可重现的代码.非常感谢你.
可能有更好的解决方案,但这应该让你开始.首先,我们加载一些库
原文链接:https://www.f2er.com/xml/292862.htmlR> library(plyr) R> library(reshape2)
然后分两部分处理你的列表.
##lapply applies ldply to each list element in turn ul1 = lapply(ul,ldply) ##We then do the same again dd = ldply(ul1)[,2:3]
接下来我们根据列表顺序对输出进行标号
R> dd$num = rep(1:3,each=4)
然后我们从长格式转换为宽格式
R> dcast(dd,num ~ name) num field final answer points Section 1 1 1 1 -0.0 1 2 2 2 1 1.0 1 3 3 3 0.611 1.0 1