求与dplyr::select等效的字符向量子集化R语言函数
与dplyr::select()等效的字符向量子集化方案
你可以借助tidyselect包(dplyr::select的底层依赖)实现类似的字符向量子集化,它完全支持select的语法,包括不带引号的名称范围选取。
方法1:直接用tidyselect::vars_select获取选中的字符值
library(tidyselect) char_vec <- c("Exclude1", paste0("Include", 1:5), "Exclude2") # 按名称范围选取 selected <- vars_select(char_vec, Include1:Include5) selected # 输出:"Include1" "Include2" "Include3" "Include4" "Include5"
方法2:用tidyselect::eval_select获取位置索引再子集
如果需要基于原向量的位置提取元素(比如向量存在重复值时更稳妥),可以先获取位置索引:
pos <- eval_select(expr(Include1:Include5), data = char_vec) char_vec[pos] # 输出:"Include1" "Include2" "Include3" "Include4" "Include5"
方法3:结合dplyr语法(适合熟悉dplyr的用户)
把字符向量转为单列数据框,用select配合pull提取结果:
library(dplyr) char_vec %>% enframe(name = NULL, value = "cols") %>% select(cols = Include1:Include5) %>% pull(cols)
以上方法都支持dplyr::select的所有选择语法,比如starts_with("Include")、matches("Include[1-3]")等,完全匹配你想要的使用体验。
内容的提问来源于stack exchange,提问作者kamiks
相关产品推荐
相关产品推荐

