我有以下数据:
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我想让这些列变成
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所以我做了
library(dplyr)
library(gtools)
df %>%
select(1, mixedorder(names(.)[-1]))但这给了
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如何获得具有所需列顺序的输出?
发布于 2022-05-19 17:37:10
使用mixedsort而不是mixedorder
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
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发布于 2022-05-19 17:53:13
有了dplyr,我们可以:
library(dplyr)
df %>% select(order(colnames(df))) 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发布于 2022-05-19 17:38:11
一种可能的解决办法:
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 33https://stackoverflow.com/questions/72308874
复制相似问题