如何在dplyr的complete函数中使用外部列名向量?
解决方法
要在complete()中使用外部字符串向量替代直接写列名,有两种简洁的实现方式:
方法1:使用all_of()结合向量拼接
complete()支持tidyselect语法,因此可以用all_of()直接解析字符串向量。把你的外部向量vars和其他需要补全的列名字符串合并成一个向量,传入all_of()即可:
library(dplyr) library(tidyr) df <- expand.grid(Sex = c("Male", "Female"), Year = 2015:2020, Colour = c("red", "green")) %>% filter(Sex == "Female" | Year > 2017) vars <- "Sex" # 使用vars替代Sex,完成补全 df %>% complete(all_of(c(vars, "Year", "Colour")))
方法2:使用syms()和非标准求值
借助rlang包的syms()函数将字符串向量转换为符号对象,再通过!!!(非拼接操作符)传入complete():
library(dplyr) library(tidyr) library(rlang) df <- expand.grid(Sex = c("Male", "Female"), Year = 2015:2020, Colour = c("red", "green")) %>% filter(Sex == "Female" | Year > 2017) vars <- "Sex" # 转换字符串为符号后传入complete df %>% complete(!!!syms(c(vars, "Year", "Colour")))
两种方法的效果和直接写complete(Sex, Year, Colour)完全一致,且如果vars包含多个列名字符串(比如vars <- c("Sex", "Colour")),同样可以直接复用代码。
内容的提问来源于stack exchange,提问作者user2602640
相关产品推荐
相关产品推荐

