我为dplyr
提供了以下(大大简化)mutate
示例:
xx <- data.frame(x = 1:10, y = c(rep(1,4),rep(2,6)))
bla_fun <- function(x,y){cat(x," ",y,"\n"); min(x,y)}
xx %>% rowwise() %>%
mutate( z = bla_fun(x,y))
我想让它与mutate_at
一起使用,它可以将列名作为字符串传递给我。
xx %>% rowwise() %>%
mutate_at( c("x","y"), funs("bla_fun") )
但这不起作用。如何让它运作?
答案 0 :(得分:0)
syms <- rlang::syms(c("x", "y"))
xx %>%
rowwise() %>%
mutate( z = bla_fun(!!! syms))
附注1:mutate_at
通常用于将n个一元函数应用于n个变量,而不是1个n元函数应用于n个变量。 mutate
完成了这项工作。
附注2:无需按行分组。您可以更简单地mutate(xx, z = purrr::map2_dbl(x, y, bla_fun))
或直接将bla_fun
改为/ {{{{{{{{{}。
将此与pmin()
字符串结合使用,例如mutate
,或syms
。
答案 1 :(得分:0)
mutate_at
分别改变每一列。
您的特定示例可以解决(假设min
是一个不能被pmin
替换的占位符),如下所示:
xx %>%
mutate(z = map2(!!sym("x"), !!sym("y"), !!sym("bla_fun")))