xml – 列表中的数据帧列表

前端之家收集整理的这篇文章主要介绍了xml – 列表中的数据帧列表前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我必须处理一个名为ul的丑名单,如下所示:
  1. [[1]]
  2. [[1]]$param
  3. name value
  4. "Section" "1"
  5.  
  6. [[1]]$param
  7. name value
  8. "field" "1"
  9.  
  10. [[1]]$param
  11. name value
  12. "final answer" "1"
  13.  
  14. [[1]]$param
  15. name value
  16. "points" "-0.0"
  17.  
  18.  
  19. [[2]]
  20. [[2]]$param
  21. name value
  22. "Section" "1"
  23.  
  24. [[2]]$param
  25. name value
  26. "field" "2"
  27.  
  28. [[2]]$param
  29. name value
  30. "final answer" "1"
  31.  
  32. [[2]]$param
  33. name value
  34. "points" "1.0"
  35.  
  36.  
  37. [[3]]
  38. [[3]]$param
  39. name value
  40. "Section" "1"
  41.  
  42. [[3]]$param
  43. name value
  44. "field" "3"
  45.  
  46. [[3]]$param
  47. name value
  48. "final answer" "0.611"
  49.  
  50. [[3]]$param
  51. name value
  52. "points" "1.0"

我想将列表转换成一个简单的数据框,即

  1. Section field final answer points
  2. 1 1 1 -0.0
  3. 1 2 1 1.0
  4. 1 3 0.611 1.0

有没有直接的方法来实现呢?或者我必须单独访问每个列表并将其绑定到数据框?

数据是从一个更加恶劣的xml文件导入的,所以如果有人想玩它,那里有一个链接RData file.对不起,没有可重现的代码.非常感谢你.

可能有更好的解决方案,但这应该让你开始.首先,我们加载一些库
  1. R> library(plyr)
  2. R> library(reshape2)

然后分两部分处理你的列表.

  1. ##lapply applies ldply to each list element in turn
  2. ul1 = lapply(ul,ldply)
  3.  
  4. ##We then do the same again
  5. dd = ldply(ul1)[,2:3]

接下来我们根据列表顺序对输出进行标号

  1. R> dd$num = rep(1:3,each=4)

然后我们从长格式转换为宽格式

  1. R> dcast(dd,num ~ name)
  2.  
  3. num field final answer points Section
  4. 1 1 1 1 -0.0 1
  5. 2 2 2 1 1.0 1
  6. 3 3 3 0.611 1.0 1

猜你在找的XML相关文章