r - dplyr::select()与某些可能在数据框中不存在的变量?

标签 r select dplyr nse tidyselect

我有一个辅助函数(例如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)返回taxonmodelz列,而foo(d2)仅返回taxonz

如果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/

相关文章:

r - 使用 `map` 按列名称查找 rowMeans

python - 是否有与 pythonic "if __name__ == "__main_ _": main()"等效的 R?

r - Quantmod getSymbols 警告消息

SQL 选择其中只有特定值的行

mysql - SELECT WHERE IN(子查询)慢

r - 在小标题中显示测量单位

r - R-reticulate python 的对象内存使用情况

r - 使用 R 属性有什么危险?

mysql - 子查询在 group by 子句中返回多于 1 行 - MySQL

r - left_join 两个数据帧并覆盖