我有下面的資料框:
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
如何獲得具有所需列順序的輸出?
uj5u.com熱心網友回復:
我們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
uj5u.com熱心網友回復:
使用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
uj5u.com熱心網友回復:
一個可能的解決方案:
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
uj5u.com熱心網友回復:
更簡單的方法:
df[,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
uj5u.com熱心網友回復:
另外一個選項:
library(dplyr)
df %>%
select(sort(tidyselect::peek_vars()))
輸出:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/478496.html
上一篇:在R中過濾資料框
