首页 > 解决方案 > dplyr::select() 对可能不存在的列重新排序

问题描述

在 dplyr 中,如何根据包含在 tibble 中可能存在或不存在的变量的列名称的字符向量对 tibble 的列重新排序?

我试过select_if(names(.) %in% col_vector)了,但这并没有对列重新排序。

例子:

set.seed(1)
col_order <- c("a", "b", "c", "d", "e")
tibby <- tibble(d = rnorm(10), b = runif(10), a = rnorm(10))

select_if(tibby, names(tibby) %in% col_order)
# A tibble: 10 x 3
#        d      b       a
#    <dbl>  <dbl>   <dbl>
# 1 -0.626 0.935  -0.0449
# 2  0.184 0.212  -0.0162
# 3 -0.836 0.652   0.944 
# 4  1.60  0.126   0.821 
# 5  0.330 0.267   0.594 
# 6 -0.820 0.386   0.919 
# 7  0.487 0.0134  0.782 
# 8  0.738 0.382   0.0746
# 9  0.576 0.870  -1.99  
# 10 -0.305 0.340   0.620 

标签: rdplyrtidyverse

解决方案


你可以做:

select(tibby, one_of(col_order))

         a      b      d
     <dbl>  <dbl>  <dbl>
 1 -0.0449 0.935  -0.626
 2 -0.0162 0.212   0.184
 3  0.944  0.652  -0.836
 4  0.821  0.126   1.60 
 5  0.594  0.267   0.330
 6  0.919  0.386  -0.820
 7  0.782  0.0134  0.487
 8  0.0746 0.382   0.738
 9 -1.99   0.870   0.576
10  0.620  0.340  -0.305

推荐阅读