【问题标题】:How to order variables in a list?如何对列表中的变量进行排序?
【发布时间】:2011-10-21 12:31:17
【问题描述】:

我有一个 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 中。知道如何实现这一目标吗?

【问题讨论】:

    标签: list r


    【解决方案1】:

    你想要这样的东西吗?

    > 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
    

    【讨论】:

    • 这是一个非常简单而优雅的解决方案。我现在是终身粉丝,但只能通过 +1 来表达。
    • 我想将这些变量保留在 data.frame 中。它们应该排列在 data.frame 的最右边
    猜你喜欢
    • 2019-12-22
    • 2021-01-25
    • 2012-06-26
    • 1970-01-01
    • 2021-11-03
    • 2022-12-08
    • 2013-03-28
    • 2019-04-15
    相关资源
    最近更新 更多