【问题标题】:reorder columns dynamically in a data frame in R在R中的数据框中动态重新排序列
【发布时间】:2018-12-04 21:26:55
【问题描述】:

我正在尝试对 R 中的列重新排序。情况如下:

我现在有 9 列:A-NP F-WR K-WR H-ER Q-ER B-NP C-NP Z-WR X-ER

规则是 NP > WR > ER。所以名称中带有 NP 的列应该是第一列。在同一组的列中,按字母顺序排列。

所以想要的输出是:

A-NP B-NP C-NP F-WR K-WR Z-WR H-ER Q-ER X-ER

这些列采用这种格式(某些东西-NP/WR/ER),但每次都不一样,所以我想创建一些可以动态排序这些列的东西。

有什么想法吗?

谢谢,

【问题讨论】:

    标签: r dataframe data-manipulation


    【解决方案1】:
    # create an example data frame
    df <- data.frame(matrix(ncol = 9, nrow = 0))
    names(df) <- c("A-NP", "F-WR", "K-WR", "H-ER", "Q-ER", "B-NP", "C-NP", "Z-WR", "X-ER")
    
    library(dplyr)
    
    df %>%
      # sort in alphabetical order
      select(sort(names(.))) %>%
      # sort based on the rule
      select(contains("NP"), contains("WR"), contains("ER"))
    # [1] A-NP B-NP C-NP F-WR K-WR Z-WR H-ER Q-ER X-ER
    # <0 rows> (or 0-length row.names)
    

    【讨论】:

      【解决方案2】:

      这是使用 ?grep() 的基本 R 解决方案 -

      df <- data.frame(matrix(ncol = 9, nrow = 0))
      names(df) <- c("F-WR", "K-WR", "H-ER", "Q-ER", "B-NP", "C-NP", "Z-WR", "X-ER", "A-NP")
      
      df[, c(sort(grep("NP", names(df), value = T)), 
             sort(grep("WR", names(df), value = T)), 
             sort(grep("ER", names(df), value = T))
            )
        ]
      
      
      [1] A-NP B-NP C-NP F-WR K-WR Z-WR H-ER Q-ER X-ER
      <0 rows> (or 0-length row.names)
      

      【讨论】:

        猜你喜欢
        • 2013-07-03
        • 2012-10-01
        • 1970-01-01
        • 2020-09-28
        • 1970-01-01
        • 2014-06-23
        • 1970-01-01
        • 2023-01-19
        相关资源
        最近更新 更多