我正在尝试对一个列表进行排序,该列表填充了5个不同的数据框,但具有相同的列名,但排列方式不同。
可复制的示例:
d1 <- data.frame(y1 = c(1, 2, 3), y2 = c(4, 5, 6), y3 = c(5,6,7))
d2 <- data.frame(y2 = c(3, 2, 1), y3 = c(6, 5, 4), y1 = c(5,6,7))
my.list <- list(d1, d2)
> my.list
[[1]]
y1 y2 y3
1 1 4 5
2 2 5 6
3 3 6 7
[[2]]
y2 y3 y1
1 3 6 5
2 2 5 6
3 1 4 7
我试图将列表中的每个数据框列按我在colnamesvec下创建的特定顺序排列(请参见下文)。
colnamesvec <- c("y3", "y2", "y1")
如果我将每个单独的数据帧都子集化,则可以使用base R命令实现它。但是,有没有更好的方法可以轻松地循环实现我想要的目标?
s <- my.list[[1]]
s[colnamesvec]
谢谢!
答案 0 :(得分:2)
使用lapply
并为每个数据框重新排列列。
my.list[] <- lapply(my.list, function(x) x[colnamesvec])
my.list
#[[1]]
# y3 y2 y1
#1 5 4 1
#2 6 5 2
#3 7 6 3
#[[2]]
# y3 y2 y1
#1 6 3 5
#2 5 2 6
#3 4 1 7
这是假设colnamesvec
中的所有列都存在于列表中的每个数据框中。