大家好我试图用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
,但我没有得到那个结果。谢谢你的帮助。
答案 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]