首页 > 解决方案 > 与现有列名冲突时强制 dplyr 评估传递的符号/quosure

问题描述

问题

我想将列名的字符串转换dplyr::arrange为表单am <- "cyl"。目的是按列排序cyl

期望的结果

dplyr::arrange(mtcars, cyl)

尝试

am <- "cyl"

1)rlang::quo

dplyr::arrange(mtcars, !!rlang::quo(am))

amnot排序cyl

2)rang::ensym

dplyr::arrange(mtcars, !!rlang::ensym(am))

amnot排序cyl

3)咖喱卷

dplyr::arrange(mtcars, {{am}})

未排序。


背景

在实际功能中,我按我正在创建的索引列对数据框进行排序。具有列名称的变量称为index_column。我想保护自己免受实际数据包含index_column. 我可以使用make.names和扫描唯一的列名来解决这个问题,但我对解决上述问题更感兴趣。

标签: rdplyrrlangtidyevalquosure

解决方案


这将是sym

out2 <-  dplyr::arrange(mtcars, !!rlang::sym(am))

- 使用 OP 的预期进行测试

out1 <- dplyr::arrange(mtcars, cyl)
identical(out1, out2)
#[1] TRUE

推荐阅读