在 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/