使用tidyr以矢量给定的特定顺序选择列

时间:2016-05-17 12:33:40

标签: r dplyr

我想使用data.frame中的select函数选择library(dplyr)中的某些列。列在向量中给出,我可以使用one_of()来执行此操作:

library(dplyr)

ddf <- data.frame(A = 1:2, B = 2:1, C = LETTERS[1:2])
sel <- c("A", "C")

ddf %>% select(one_of(sel))
#   A C
# 1 1 A
# 2 2 B

我也可以使用-one_of(.)形式来选择除给定列之外的所有内容:

ddf %>% select(-one_of(sel))
#   B
# 1 2
# 2 1

但如果我尝试将两者结合起来,我会得到意想不到的结果:

ddf %>% select(-one_of(sel), one_of(sel)) # works as expected
#   B A C
# 1 2 1 A
# 2 1 2 B

ddf %>% select(one_of(sel), -one_of(sel)) ## does not work as expected
# data frame with 0 columns and 2 rows

这种行为是故意的吗?如何使用select将我的列添加到特定订单中而不会否定sel sel <- "B"将不是一个选项;)

1 个答案:

答案 0 :(得分:2)

根据@ [David Arenburg]的提议,解决方案是使用:

ddf %>% select(one_of(sel), everything())