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