我想使用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"
将不是一个选项;)
答案 0 :(得分:2)
根据@ [David Arenburg]的提议,解决方案是使用:
ddf %>% select(one_of(sel), everything())