library(tidyverse)
#> Warning: package 'tidyverse' was built under R version 3.4.4
#> Warning: package 'forcats' was built under R version 3.4.4
example <- tibble(
num1 = sample(1:100, 10),
categ1 = as.factor(c(sample(letters, 10))),
num2 = sample(1:100, 10),
categ2 = as.factor(c(sample(letters, 10)))
)
head(example)
#> # A tibble: 6 x 4
#> num1 categ1 num2 categ2
#> <int> <fct> <int> <fct>
#> 1 4 c 5 l
#> 2 86 u 64 b
#> 3 38 z 18 r
#> 4 95 e 44 j
#> 5 77 w 35 u
#> 6 84 y 14 i
Run Code Online (Sandbox Code Playgroud)
由reprex 包(v0.2.0) 于 2018-06-19 创建。
上面的示例显示了具有整数和因子数据类型列的基本数据框。在这个小示例中,可以轻松使用select(example, categ1, categ2, num1, num2)
dplyr手动选择您希望列显示的顺序。
但是,假设您有许多混合数据类型的列,并且您希望首先选择所有因素,然后选择其他所有因素(或基于数据类型的任何特定顺序)?
对于无数数量的列,手动输入每个列名称或使用select()
类似的帮助程序可能会很快变得乏味。contains()
我更喜欢tidyverse解决方案,但也对如何在基础 R 中实现这一点感兴趣。
包含 3 类列的示例数据
library(tidyverse)
example <- tibble(
num1 = as.character(sample(1:100, 10)),
categ1 = as.factor(c(sample(letters, 10))),
num2 = sample(1:100, 10),
categ2 = as.factor(c(sample(letters, 10)))
)
Run Code Online (Sandbox Code Playgroud)
假设您想按此顺序对列进行排序
my.order <- c('factor', 'integer', 'character')
Run Code Online (Sandbox Code Playgroud)
即因子,然后整数,然后字符
你可以做
example %>%
select(sapply(., class) %>% .[order(match(., my.order))] %>% names)
# # A tibble: 10 x 4
# categ1 categ2 num2 num1
# <fct> <fct> <int> <chr>
# 1 y e 94 46
# 2 t b 52 31
# 3 w c 32 57
# 4 k i 27 89
# 5 n d 76 14
# 6 x g 67 40
# 7 c v 16 20
# 8 e z 6 95
# 9 i t 70 13
# 10 g w 57 42
Run Code Online (Sandbox Code Playgroud)
作为函数(相同的输出)
order_cols <- function(df, col.order){
df %>%
select(sapply(., class) %>% .[order(match(., col.order))] %>% names)
}
example %>%
order_cols(c('factor', 'integer', 'character'))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2464 次 |
最近记录: |