r - dplyr::select() 对可能不存在的列重新排序

标签 r dplyr tidyverse

在 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 

最佳答案

我们可以使用 intersect

library(dplyr)
tibby %>%
     select(intersect(col_order, names(.)))
# A tibble: 10 x 3
#         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

关于r - dplyr::select() 对可能不存在的列重新排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61228597/

相关文章:

r - "Error in strsplit(version_with_dots, "\\. ")[[1]] : subscript out of bounds"用于更新程序功能

r - R 的 Plotly 中的两个 X 轴

r - 如何在R中对组内的列进行排序?

r - 提取两个字母之间的字符串并在 R dplyr 中创建一个新列

r - 如何在 64 位 Windows 计算机上安装 rJava 以与 64 位 R 一起使用?

r - 如何将数据帧转换为命名列表并删除 NA

r - 查找 R 数据帧字符串列中的最大数字

r - 使用 summarise_each() 计算忽略 NA 的记录

r - 根据多种条件填充单元格数据框

r - 如何打印 purrr::map 在 R 中作用的数据帧行