xml - R中数据框的列表列表

标签 xml list r dataframe

我必须处理一个名为 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

有什么简单的方法可以实现吗?还是我必须创建一个函数来单独访问每个列表并将其绑定(bind)到数据框?

数据是从一个更丑陋的 xml 文件导入的,所以如果有人想玩它,可以链接到 RData file .抱歉没有可重现的代码。非常感谢。

最佳答案

可能有更好的解决方案,但这应该可以帮助您入门。首先,我们加载一些库

R> 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

关于xml - R中数据框的列表列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8477868/

相关文章:

java - 如何在 jaxb 中编写我无法控制的对象?

java - 简洁、无警告、通用列表声明?

Python:删除列表中的重复项传递到新列表中(递归)

android - 如何知道操作栏中的 SearchView 何时关闭?

r - ggplot错误的颜色分配

r - 如何扩展x轴和y轴并缩小ggthemes::theme_tufte()中的间隙

xml - 如何比较 XML 文件

java - 如何强制 Chrome Postman 返回 application/xml 而不是 application/octet-stream

android - 如何在Android中没有 Activity 和 fragment 的功能中使用布局组件?

r - Java Script 警报 R 遇到 fatal error 。此 session 已终止