基于参考向量对列表中数据框的列进行排序

时间:2018-11-30 02:20:48

标签: r

我正在尝试对一个列表进行排序,该列表填充了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]

谢谢!

1 个答案:

答案 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中的所有列都存在于列表中的每个数据框中。