我的变量名称如下所示:
df <- data.frame(var_NA = 1:10, var = 11:20, var_level = 21:30, var_total = 31:40)
除了我有很多的变量。关键特征是,对于每个“母”变量
var
,都有许多具有不同名称的“子”变量(如 var_NA
和 var_level
)。有些“母亲”比其他“母亲”有更多的“孩子”。但有一件事是固定的:总有一个孩子的后缀是 _NA
。
我想要的是像这样排序列:
_NA
孩子_NA
孩子在我的示例中,结果将是
var
、var_NA
、var_level
、var_total
。
我已经放弃尝试
select(ends_with())
,relocate()
和其他评论。这可能最好用正则表达式来完成,我对此完全一无所知。有什么想法吗?
试试这个
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
这是你想要的吗?
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 是其他 _ 列名称上唯一的大写字母,此方法就有效。