gpt4 book ai didi

r - 在 dplyr::mutate() 中编写一个带有默认列名输入的函数

转载 作者:行者123 更新时间:2023-12-04 15:51:18 25 4
gpt4 key购买 nike

我正在尝试编写一个函数来计算数据框中的新列。我希望该函数将默认列名作为输入,并且能够从 dplyr::mutate() 中调用。

这是一个简化的示例,我在其中使用名为 age 的列来计算四舍五入的年龄。

library(dplyr)
# function to round age WITH DEFAULT vector/column to round
round_age <- function(age = age) {
round(age)
}

# create dummy data
data = data.frame(age = c(50.1, 60.5))

# try to use default age column - ERROR
data %>%
mutate(
age_round = round_age()
)
#> Error in mutate_impl(.data, dots): Evaluation error: non-numeric argument to mathematical function.

# specify age column to round - NO ERROR
data %>%
mutate(
age_round = round_age(age = age)
)
#> age pat_age age_round
#> 1 50.1 50.1 50
#> 2 60.5 60.5 60

我希望能够在不指定数据帧的情况下从 dplyr::mutate 中调用该函数。有任何想法吗?非常感谢所有提示!

谢谢!丹尼尔

最佳答案

我们可以编写一个名为 round_x() 的函数,它环绕 mutate() 并将 age 作为默认参数:

library(dplyr)

round_x <- function(.data, x = age) {
x <- enquo(x)
var_name <- paste0("round_", quo_name(x))
mutate(.data, !!var_name := round(!!x))
}

如果我们不带参数调用这个函数:

data %>% round_x()
# age round_age
#1 50.1 50
#2 60.5 60

如果需要,我们可以传递其他参数:

data.frame(data, weight = c(180.5, 200.6)) %>% round_x(weight)
# age weight round_weight
#1 50.1 180.5 180
#2 60.5 200.6 201

关于r - 在 dplyr::mutate() 中编写一个带有默认列名输入的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53767647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com