dplyr 0.7当量已弃用mutate_

ste*_*hLH 6 r dplyr tidyeval rlang

我无法找到dplyr 0.7替换将被弃用的mutate_函数的方法.

mutate_功能在我的使用情况是有用的:我存储在数据库(字符串格式)许多指令(即如果需要,可以过滤),并应用这些指令到一个或几个数据帧.

例如 :

dplyr::tibble(test = "test@test") %>% 
  dplyr::mutate_(.dots = list("test2" = "substr(test, 1, 5)",
                              "test3" = "substr(test, 5, 5)"))
Run Code Online (Sandbox Code Playgroud)

有没有办法用dplyr 0.7保存变量和指令作为字符?

Art*_*lov 7

为了扩展一下MrFlick的例子,让我们假设你有一些存储为字符串的指令,以及你想要分配给结果计算的相应名称:

ln <- list( "test2", "test3" )
lf <- list( "substr(test, 1, 5)", "substr(test, 5, 5)" )
Run Code Online (Sandbox Code Playgroud)

将名称与其说明匹配并将所有内容转换为quosures:

ll <- setNames( lf, ln ) %>% lapply( rlang::parse_quosure )
Run Code Online (Sandbox Code Playgroud)

根据aosmith的建议,现在可以使用特殊!!!运算符将整个列表传递给mutate :

tibble( test = "test@test" ) %>% mutate( !!! ll )
# # A tibble: 1 x 3
#        test test2 test3
#       <chr> <chr> <chr>
# 1 test@test test@     @
Run Code Online (Sandbox Code Playgroud)


MrF*_*ick 5

这是另一种选择

a <- "test2"
b <- "test3"
dplyr::tibble(test = "test@test") %>% 
dplyr::mutate(a := !!rlang::parse_expr("substr(test, 1, 5)"),
  b := !!rlang::parse_expr("substr(test, 5, 5)"))
# # A tibble: 1 x 3
#        test     a     b
#       <chr> <chr> <chr>
# 1 test@test test@     @
Run Code Online (Sandbox Code Playgroud)

我们使用:=运算符动态地为字符串命名参数,然后我们解析转换的表达式字符串并将其解包!!