如何在列表中订购变量?

时间:2011-10-21 12:31:18

标签: list r

我有一个data.frames列表。

A <- list(aa = data.frame(var1 = c(1:3), varb = c(1:3), abu = c(1:3)), 
          bb = data.frame(abu = c(1:3), var1 = c(1:3), vara = c(1:3), varb = c(1:3)), 
          cc = data.frame(varb = c(1:3), g = c(1:3))) 

输出

> A
$aa
  var1 varb abu
1    1    1   1
2    2    2   2
3    3    3   3

$bb
  abu var1 vara varb
1   1    1    1    1
2   2    2    2    2
3   3    3    3    3

$cc
  varb g
1    1 1
2    2 2
3    3 3

>

如何在这些data.frames中订购变量,以便变量的顺序与data.frame $ aa相同?如果data.frame没有对应变量,则应该在包含NA数据的data.frame中创建变量。知道如何实现这个目标吗?

1 个答案:

答案 0 :(得分:8)

你想要这样的东西吗?

> lapply(A, function(x) {
+   x[(setdiff(names(A$aa), names(x)))] <- NA
+   x[names(A$aa)]
+ })
$aa
  var1 varb abu
1    1    1   1
2    2    2   2
3    3    3   3

$bb
  var1 varb abu
1    1    1   1
2    2    2   2
3    3    3   3

$cc
  var1 varb abu
1   NA    1  NA
2   NA    2  NA
3   NA    3  NA

您希望如何处理A$aa中未显示的变量,例如A$bb$vara

略微更新以保留其他变量

> lapply(A, function(x) {
+   x[setdiff(names(A$aa), names(x))] <- NA
+   x[c(names(A$aa), setdiff(names(x), names(A$aa)))]
+ })
$aa
  var1 varb abu
1    1    1   1
2    2    2   2
3    3    3   3

$bb
  var1 varb abu vara
1    1    1   1    1
2    2    2   2    2
3    3    3   3    3

$cc
  var1 varb abu g
1   NA    1  NA 1
2   NA    2  NA 2
3   NA    3  NA 3