如何在R中列出列表的数据帧,考虑每个列表的名称

时间:2013-11-11 18:28:09

标签: r

大家好我试图用R中的数据帧列表解决一个小问题。我在R中列出了五个数据帧,它们按名称排序,例如首先是d1,第二个d2等等,最终为d5。我的列表结构是下一个:

structure(list(d1 = structure(list(x = c("001", "002", "003", 
"004", "005", "006"), y = c(1, 2, 1, 1, 1, 1), z1 = c(1, 1, 1, 
1, 1, 1)), .Names = c("x", "y", "z1"), row.names = c(NA, 6L), class = "data.frame"), 
    d2 = structure(list(x = c("001", "002", "003", "004", "005", 
    "006", "007"), y = c(1, 2, 1, 1, 1, 1, 1), z2 = c(2, 2, 2, 
    2, 2, 2, 2)), .Names = c("x", "y", "z2"), row.names = c(NA, 
    7L), class = "data.frame"), d3 = structure(list(x = c("001", 
    "002", "003", "004", "005", "006", "007", "008"), y = c(1, 
    2, 1, 1, 1, 1, 1, 1), z3 = c(3, 3, 3, 3, 3, 3, 3, 3)), .Names = c("x", 
    "y", "z3"), row.names = c(NA, 8L), class = "data.frame"), 
    d4 = structure(list(x = c("001", "002", "003", "004", "005", 
    "006", "007", "008", "009"), y = c(1, 2, 1, 1, 1, 1, 1, 1, 
    1), z4 = c(4, 4, 4, 4, 4, 4, 4, 4, 4)), .Names = c("x", "y", 
    "z4"), row.names = c(NA, 9L), class = "data.frame"), d5 = structure(list(
        x = c("001", "002", "003", "004", "005", "006", "007", 
        "008", "009", "010"), y = c(1, 2, 1, 1, 1, 1, 1, 1, 1, 
        1), z5 = c(5, 5, 5, 5, 5, 5, 5, 5, 5, 5)), .Names = c("x", 
    "y", "z5"), row.names = c(NA, 10L), class = "data.frame")), .Names = c("d1", 
"d2", "d3", "d4", "d5"))

我的问题是我可以有超过五个元素,我需要考虑他们的名字以降序排列它们,例如我想要在第一个位置a5,第二个位置a4,第三个位置{ {1}},第二个职位a3和最终职位a2。我想要这样的东西:

a1

我等待这可以在R中制作,我试图使用list a5 x y z5 001 1 5 a4 x y z4 001 1 4 a3 x y z3 001 1 3 a2 x y z2 001 1 2 a1 x y z1 001 1 1 包中的llply,但我没有得到那个结果。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

使用mixedorder包中的gtools并假设您的列表是dat:

library(gtools)
dat[rev(mixedorder(names(dat)))]

或者OP使用正则表达式提出:

df.names=names(list) 
df.names=df.names[order(as.integer(sub("[a-z]", "", df.names)),
                        decreasing = TRUE)]   
list=list[df.names]