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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在R中的数据帧中动态地重新排序列相关的知识,希望对你有一定的参考价值。

我试图重新排序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),但它每次都不同,所以我想创建一些可以动态排序这些列的东西。

有任何想法吗?

谢谢,

答案
# 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)
另一答案

这是使用?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)

以上是关于在R中的数据帧中动态地重新排序列的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 R 中的另一个数据帧解码一个数据帧中变量的值?

逐列匹配展平R数据帧中的行

R - 数据帧中的条件更新坐标列

R中的重新排序和重塑列[重复]

控制 spark-sql 和数据帧中的字段可空性

R:dplyr 有条件地汇总并重新编码列中的值