如何在列表中订购变量?

jra*_*ara 2 r list

我有一个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))) 
Run Code Online (Sandbox Code Playgroud)

产量

> 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

>
Run Code Online (Sandbox Code Playgroud)

如何在这些data.frames中订购变量,以便变量的顺序与data.frame $ aa相同?如果data.frame没有对应变量,则应该在包含NA数据的data.frame中创建变量.知道怎么做到这一点?

koh*_*ske 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

  • 这是一个非常简单和优雅的解决方案.我现在是生活的粉丝,但只能通过+1来表达. (2认同)