根据 R 中的后缀条件对列进行排序

问题描述 投票:0回答:2

我的变量名称如下所示:

df <- data.frame(var_NA = 1:10, var = 11:20, var_level = 21:30, var_total = 31:40)

除了我有很多的变量。关键特征是,对于每个“母”变量

var
,都有许多具有不同名称的“子”变量(如
var_NA
var_level
)。有些“母亲”比其他“母亲”有更多的“孩子”。但有一件事是固定的:总有一个孩子的后缀是
_NA

我想要的是像这样排序列:

  1. 母亲变量
  2. _NA
    孩子
  3. 其余的(如果有的话)
  4. 母亲变量
  5. _NA
    孩子
  6. 其余的(如果有的话) 。 。 .

在我的示例中,结果将是

var
var_NA
var_level
var_total

我已经放弃尝试

select(ends_with())
relocate()
和其他评论。这可能最好用正则表达式来完成,我对此完全一无所知。有什么想法吗?

r dataframe tidyverse
2个回答
0
投票

试试这个

df[order(names(df))]

给予

   var var_NA var_v2
1   11      1     21
2   12      2     22
3   13      3     23
4   14      4     24
5   15      5     25
6   16      6     26
7   17      7     27
8   18      8     28
9   19      9     29
10  20     10     30

0
投票

这是你想要的吗?

library(dplyr)
order <- data.frame(new_order = colnames(df)) |>
  group_by(new_order) |> 
  arrange(new_order) |> 
  pull(new_order)

df |>
  select(all_of(order))

只要 NA 是其他 _ 列名称上唯一的大写字母,此方法就有效。

© www.soinside.com 2019 - 2024. All rights reserved.