在R中对数据帧中的列动态重新排序

在R中对数据帧中的列动态重新排序,r,dataframe,data-manipulation,R,Dataframe,Data Manipulation,我正在尝试对R中的列重新排序。情况如下: 我现在有9列:A-npf-wrk-wrh-erq-erb-npc-npz-wrx-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,但每次都不同,所以我想创建一些可以动态排序这些列的东西 有什么想法吗 谢谢,#创建一个示例数据框 # create an ex

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

我现在有9列:
A-npf-wrk-wrh-erq-erb-npc-npz-wrx-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,但每次都不同,所以我想创建一些可以动态排序这些列的东西

有什么想法吗

谢谢,

#创建一个示例数据框
# 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)
df% #根据规则进行排序 选择(包含(“NP”)、包含(“WR”)、包含(“ER”)) #[1]A-NPB-NPC-NPF-WR K-WR Z-WR H-ER Q-ER X-ER #(或长度为0的行名称)
这是一个使用
?grep()的基本R解决方案
-

df
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)