2

大家好,我正在尝试用 R 中的数据框列表解决一个小问题。我在 R 中有五个数据框的列表,它们按名称排序,例如 first is d1, secondd2等,final is 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,第三个位置a3,第二个位置a2和最后一个位置a1。我想要这样的东西:

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

我等待这可以在 R 中实现,我试图llplyplyr包中使用,但我没有得到那个结果。谢谢你的帮助。

4

1 回答 1

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] 
于 2013-11-11T18:34:37.003 回答