dplyr 0.7 等效于已弃用的 mutate_
dplyr 0.7 equivalent for deprecated mutate_
我在 dplyr 0.7
中找不到替换 mutate_ 函数的方法,该函数将被弃用。
mutate_ 函数在我的用例中很有用:我在数据库(字符串格式)中存储了许多指令(如果需要可以过滤)并将这些指令应用于一个或几个数据帧。
例如:
dplyr::tibble(test = "test@test") %>%
dplyr::mutate_(.dots = list("test2" = "substr(test, 1, 5)",
"test3" = "substr(test, 5, 5)"))
有没有办法用 dplyr 0.7 将变量和指令保持为字符?
这是另一种选择
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@ @
我们使用 :=
运算符动态命名带有字符串的参数,我们解析转换的表达式字符串并用 !!
解包
为了扩展 MrFlick 的示例,我们假设您有许多存储为字符串的指令,以及要分配给结果计算的相应名称:
ln <- list( "test2", "test3" )
lf <- list( "substr(test, 1, 5)", "substr(test, 5, 5)" )
将名称与他们的指令匹配并将所有内容转换为 quosures:
ll <- setNames( lf, ln ) %>% lapply( rlang::parse_quosure )
根据 aosmith 的建议,现在可以使用特殊的 !!!
运算符将整个列表传递给 mutate:
tibble( test = "test@test" ) %>% mutate( !!! ll )
# # A tibble: 1 x 3
# test test2 test3
# <chr> <chr> <chr>
# 1 test@test test@ @
我在 dplyr 0.7
中找不到替换 mutate_ 函数的方法,该函数将被弃用。
mutate_ 函数在我的用例中很有用:我在数据库(字符串格式)中存储了许多指令(如果需要可以过滤)并将这些指令应用于一个或几个数据帧。
例如:
dplyr::tibble(test = "test@test") %>%
dplyr::mutate_(.dots = list("test2" = "substr(test, 1, 5)",
"test3" = "substr(test, 5, 5)"))
有没有办法用 dplyr 0.7 将变量和指令保持为字符?
这是另一种选择
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@ @
我们使用 :=
运算符动态命名带有字符串的参数,我们解析转换的表达式字符串并用 !!
为了扩展 MrFlick 的示例,我们假设您有许多存储为字符串的指令,以及要分配给结果计算的相应名称:
ln <- list( "test2", "test3" )
lf <- list( "substr(test, 1, 5)", "substr(test, 5, 5)" )
将名称与他们的指令匹配并将所有内容转换为 quosures:
ll <- setNames( lf, ln ) %>% lapply( rlang::parse_quosure )
根据 aosmith 的建议,现在可以使用特殊的 !!!
运算符将整个列表传递给 mutate:
tibble( test = "test@test" ) %>% mutate( !!! ll )
# # A tibble: 1 x 3
# test test2 test3
# <chr> <chr> <chr>
# 1 test@test test@ @