mutate_at - 使用带有 map2 的函数
mutate_at - using a function with map2
我的 objective 是将一组每月收入列从 AUD 转换为 USD。为此,我需要对每个收入列应用不同的汇率。
分析数据:
pacman::p_load(lubridate, purrr, dplyr)
df1 <- data.frame(
Date = seq(dmy("01/01/2017"), by = "day", length.out = 3),
Customer = "a",
Product = "xxx",
Revenue1 = c(10, 20, 30),
Revenue2 = c(100, 200, 300))
df2 <- data.frame(Factor1 = c(10),
Factor2 = c(20))
df3 <- select(df1, Revenue1:Revenue2)
这是我的功能
fx_adjust <- function(x, y = df2){map2_df(x, y, ~ .x * .y)}
这两个作品:
fx_adjust(df3, df2)
mutate_at(df1, vars(contains("Revenue")), funs(. * 10))
但这不起作用:
mutate_at(df1, vars(contains("Revenue")), funs(fx_adjust(.)))
谁能解释一下为什么 mutate_at
行为不端。
这是因为 mutate_at
分别为每一列调用您的函数。它不会在 .
中一次传递所有列
观察这个例子
fx_dump<-function(...) print(list(...))
mutate_at(df1, vars(contains("Revenue")), funs(fx_dump(.)))
您会看到 fx_dump
被调用了两次,每列一次。您不能使用 mutate_at
.
一次将多个参数传递给您的函数
我的 objective 是将一组每月收入列从 AUD 转换为 USD。为此,我需要对每个收入列应用不同的汇率。
分析数据:
pacman::p_load(lubridate, purrr, dplyr)
df1 <- data.frame(
Date = seq(dmy("01/01/2017"), by = "day", length.out = 3),
Customer = "a",
Product = "xxx",
Revenue1 = c(10, 20, 30),
Revenue2 = c(100, 200, 300))
df2 <- data.frame(Factor1 = c(10),
Factor2 = c(20))
df3 <- select(df1, Revenue1:Revenue2)
这是我的功能
fx_adjust <- function(x, y = df2){map2_df(x, y, ~ .x * .y)}
这两个作品:
fx_adjust(df3, df2)
mutate_at(df1, vars(contains("Revenue")), funs(. * 10))
但这不起作用:
mutate_at(df1, vars(contains("Revenue")), funs(fx_adjust(.)))
谁能解释一下为什么 mutate_at
行为不端。
这是因为 mutate_at
分别为每一列调用您的函数。它不会在 .
观察这个例子
fx_dump<-function(...) print(list(...))
mutate_at(df1, vars(contains("Revenue")), funs(fx_dump(.)))
您会看到 fx_dump
被调用了两次,每列一次。您不能使用 mutate_at
.