如何使用dplyr选择命名向量中的指定元素
解决命名向量用
dplyr::select()失效的问题 哈哈,这个坑我之前也踩过!你之所以用dat %>% select(Clyde, Frank)得不到想要的结果,核心原因是:dplyr::select()是专门为数据框(data frame)设计的函数,而你定义的dat是一个命名向量,不属于数据框结构,select根本识别不了它的“列”(其实向量本身也没有列的概念)。
下面给你两种适配dplyr操作习惯的解决方法:
方法一:先把命名向量转成数据框再处理
用dplyr::enframe()函数可以把命名向量转换成标准的两列数据框(一列存名字,一列存对应的值),之后就能正常用select、filter这些dplyr工具了:
library(dplyr) # 你的原始命名向量 dat <- c("Clyde" = 1, "Susy" = 2, "Frank" = 3, "John" = 4) # 链式操作完成筛选 result <- dat %>% enframe(name = "person", value = "score") %>% # 转成数据框,自定义列名 filter(person %in% c("Clyde", "Frank")) %>% # 筛选目标名字 select(person, score) # 选择需要的列(这步也可以省略,filter后已经是目标行) # 如果只想得到纯数值向量,再加一步pull result_values <- result %>% pull(score)
方法二:直接用向量索引(简单粗暴,不用转结构)
如果你只是想快速拿到Clyde和Frank对应的数值,其实不用绕到dplyr,直接用向量的命名索引就可以:
dat[c("Clyde", "Frank")]
不过要是你坚持想用dplyr的流水线风格,方法一绝对是更贴合dplyr思维的解决方案。
内容的提问来源于stack exchange,提问作者DJC
相关产品推荐
相关产品推荐

