首页 > 解决方案 > 如何将 mutate_all() 与具有多个参数的函数一起使用

问题描述

我有一个数据框 (df),我想使用 R mutate_all() 函数将一个带有两个参数的简单函数(在我的示例中为 shr())应用于数据框中的所有列。下面是一个包含 3 列的数据框的简单示例(我的实际应用程序有超过 3 列)。我可以通过反复使用 mutate 函数得到我想要的结果。而且我可以成功地将 mutate_all() 函数与只有一个参数的函数一起使用。但是我找不到正确的方法来使用具有两个或多个参数的函数的 mutate_all() 函数获得结果。帮助表示赞赏。

我尝试了很多变体,并且在 stackoverFlow 上阅读了几个 Q 和 A,但一直无法找到答案。例如,我尝试使用“如何在 mutate_all 中为任何函数使用多个参数?” 但在我的情况下,我无法成功应用答案。

library(tidyverse)
df <- data.frame(a=c(1,2,3,4),b=c(3,3,2,2),c=c(2,4,3,1))
shr <- function(x,y) { 
    z <- x/y 
}
df1 <- mutate(df,a=shr(a,b),c=shr(c,b),b=shr(b,b)) # Gives the      result I want
# df2 <- mutate_all(df, shr, ... ? # How to pass column b to this function?

预期成绩:

          a b         c
1 0.3333333 1 0.6666667
2 0.6666667 1 1.3333333
3 1.5000000 1 1.5000000
4 2.0000000 1 0.5000000

标签: r

解决方案


你可以使用mutate_all喜欢

dplyr::mutate_all(df, list(new = ~shr(., b)))

#  a b c a_new b_new c_new
#1 1 3 2 0.333     1 0.667
#2 2 3 4 0.667     1 1.333
#3 3 2 3 1.500     1 1.500
#4 4 2 1 2.000     1 0.500

推荐阅读