我有一个辅助函数(例如foo()
),它将在可能包含或不包含指定变量的各种数据帧上运行。假设我有
library(dplyr)
d1 <- data_frame(taxon=1,model=2,z=3)
d2 <- data_frame(taxon=2,pss=4,z=3)
我要选择的变量是
vars <- intersect(names(data),c("taxon","model","z"))
也就是说,我希望
foo(d1)
返回taxon
,model
和z
列,而foo(d2)
仅返回taxon
和z
。如果
foo
包含select(data,c(taxon,model,z))
,则foo(d2)
失败(因为d2
不包含model
)。如果我使用select(data,-pss)
,则foo(d1)
同样会失败。我知道如果我退出tidyverse时该怎么做(只是返回
data[vars]
),但是我想知道是否有一种方便的方法可以做到(1)使用某种select()
辅助方法(tidyselect::select_helpers
)或(2)与tidyeval(我仍然没有时间让自己动脑筋!)
最佳答案
另一个选项是select_if
:
d2 %>% select_if(names(.) %in% c('taxon', 'model', 'z'))
# # A tibble: 1 x 2
# taxon z
# <dbl> <dbl>
# 1 2 3
关于r - dplyr::select()与某些可能在数据框中不存在的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51529294/