首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何按包含特殊符号R的名称对列排序

如何按包含特殊符号R的名称对列排序
EN

Stack Overflow用户
提问于 2022-05-19 17:34:52
回答 5查看 61关注 0票数 2

我有以下数据:

代码语言:javascript
运行
复制
df <- data.frame(aa = rep(1,4),
                ae = rep(2,4),
                dd = rep(3,4),
                `aa%` = rep(11,4),
                `ae%` = rep(22,4),
                `dd%` = rep(33,4))

  aa ae dd aa. ae. dd.
1  1  2  3  11  22  33
2  1  2  3  11  22  33
3  1  2  3  11  22  33
4  1  2  3  11  22  33

我想让这些列变成

代码语言:javascript
运行
复制
  aa aa. ae ae. dd dd.
1  1  11  2  22  3  33
2  1  11  2  22  3  33
3  1  11  2  22  3  33
4  1  11  2  22  3  33

所以我做了

代码语言:javascript
运行
复制
library(dplyr)
library(gtools)
df %>%
  select(1, mixedorder(names(.)[-1]))

但这给了

代码语言:javascript
运行
复制
  aa dd aa. ae ae.
1  1  3  11  2  22
2  1  3  11  2  22
3  1  3  11  2  22
4  1  3  11  2  22

如何获得具有所需列顺序的输出?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2022-05-19 17:37:10

使用mixedsort而不是mixedorder

代码语言:javascript
运行
复制
library(gtools)
library(dplyr)
df %>%
    select(mixedsort(names(.)))
   aa aa. ae ae. dd dd.
1  1  11  2  22  3  33
2  1  11  2  22  3  33
3  1  11  2  22  3  33
4  1  11  2  22  3  33

删除第一列的mixedorder的问题是,它返回从1开始的索引,该索引需要从2开始,即添加1

代码语言:javascript
运行
复制
df %>%
   select(1, mixedorder(names(.)[-1])+1)
  aa aa. ae ae. dd dd.
1  1  11  2  22  3  33
2  1  11  2  22  3  33
3  1  11  2  22  3  33
4  1  11  2  22  3  33
票数 2
EN

Stack Overflow用户

发布于 2022-05-19 17:53:13

有了dplyr,我们可以:

代码语言:javascript
运行
复制
library(dplyr)

df %>% select(order(colnames(df)))
代码语言:javascript
运行
复制
  aa aa. ae ae. dd dd.
1  1  11  2  22  3  33
2  1  11  2  22  3  33
3  1  11  2  22  3  33
4  1  11  2  22  3  33
票数 3
EN

Stack Overflow用户

发布于 2022-05-19 17:38:11

一种可能的解决办法:

代码语言:javascript
运行
复制
library(dplyr)

df %>% 
  select(sort(names(.)))

#>   aa aa. ae ae. dd dd.
#> 1  1  11  2  22  3  33
#> 2  1  11  2  22  3  33
#> 3  1  11  2  22  3  33
#> 4  1  11  2  22  3  33
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72308874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档