dplyr::使用先验未知级别重新编码因子

dplyr::使用先验未知级别重新编码因子,r,dplyr,R,Dplyr,我正在寻找一种方法来应用dplyr的recode_factor,当我想要修改的级别事先未知时。例如,我想对列应用cut(5),并将第一级(间隔)调整为从0开始 set.seed(42) library(dplyr) library(stringr) x <- rgamma(100, 1) x_cut <- x %>% cut(5) old_level <- levels(x_cut)[[1]] new_level <- old_level %>% str_

我正在寻找一种方法来应用dplyr的
recode_factor
,当我想要修改的级别事先未知时。例如,我想对列应用
cut(5)
,并将第一级
(间隔)
调整为从
0开始

set.seed(42)

library(dplyr)
library(stringr)

x <- rgamma(100, 1)
x_cut <- x %>% cut(5)
old_level <- levels(x_cut)[[1]]
new_level <- old_level %>% str_extract_all("[0-9]+\\.([0-9]+)",simplify=TRUE) %>% `[`(2) %>% paste0("(0,",.,"]")
x_cut %>% recode_factor( old_level = new_level) %>% levels
但是什么都没有改变,我得到了

[1] "(0.00388,1.38]" "(1.38,2.75]"    "(2.75,4.12]"    "(4.12,5.49]"    "(5.49,6.87]"

重新编码对的左侧需要求值,而不是引用

使用
:=
执行此操作的语法:

x_cut %>% recode_factor(!!old_level := new_level) %>% levels
例如,使用
set.seed(42)


有关
的更多信息,请参阅(“bang-bang”)表示法。

谢谢,这似乎适用于
重新编码
,但不适用于
重新编码系数
。可能与此有关。嗯……你是说这个解决方案不起作用吗?如果是这样,请尝试将
dplyr
更新为开发版本,在我运行它时,此代码将正确执行。
x_cut %>% recode_factor(!!old_level := new_level) %>% levels
x_cut
#  "(0.00388,1.38]" "(1.38,2.75]" "(2.75,4.12]" "(4.12,5.49]" "(5.49,6.87]"   
old_level
#  "(0.00388,1.38]"
new_level
#  "(0,1.38]"
x_cut %>% recode_factor(!!old_level := new_level) %>% levels
#  "(0,1.38]" "(1.38,2.75]" "(2.75,4.12]" "(4.12,5.49]" "(5.49,6.87]"