如何创建一个将函数应用于数据集中多个列的 R 函数?
How to create an R function which applies function to more than one column in a dataset?
这是一个示例数据集:
library(tidyverse)
library(lubridate)
db_country <- tibble(country = c("Argentina", "Australia", "Austria"),
region = c("Americas", "Asia", "Europe"),
start_date = as.numeric(18487, 18487, 18487),
end_date = as.numeric(18500, 18500, 18500))
# A tibble: 3 x 4
country region start_date end_date
<chr> <chr> <dbl> <dbl>
1 Argentina Americas 18487 18500
2 Australia Asia 18487 18500
3 Austria Europe 18487 18500
我正在尝试制作一个函数,将列中的所有值转换为日期格式。这是我目前所拥有的:
mydate <- function(dataset, column) {
dataset %>% mutate({{column}} := as_date({{column}}))
我希望能够为我创建的“列”参数输入多个列名。与其对 start_date
和 end_date
使用我的 mydate()
函数两次,我希望能够编写这样的代码并使用一行代码将该函数应用于多个列:(有点像select()
函数)
mydate(db_country, start_date, end_date)
如何编辑我的函数来执行此操作?
非常感谢任何帮助:)
你可以这样做:
mydate <- function(dataset, ...)
{
mutate(dataset, across(as.character(ensyms(...)), as_date))
}
允许以下 pipe-friendly 语法:
db_country %>% mydate(start_date, end_date)
#> # A tibble: 3 x 4
#> country region start_date end_date
#> <chr> <chr> <date> <date>
#> 1 Argentina Americas 2020-08-13 2020-08-26
#> 2 Australia Asia 2020-08-13 2020-08-26
#> 3 Austria Europe 2020-08-13 2020-08-26
这是一个示例数据集:
library(tidyverse)
library(lubridate)
db_country <- tibble(country = c("Argentina", "Australia", "Austria"),
region = c("Americas", "Asia", "Europe"),
start_date = as.numeric(18487, 18487, 18487),
end_date = as.numeric(18500, 18500, 18500))
# A tibble: 3 x 4
country region start_date end_date
<chr> <chr> <dbl> <dbl>
1 Argentina Americas 18487 18500
2 Australia Asia 18487 18500
3 Austria Europe 18487 18500
我正在尝试制作一个函数,将列中的所有值转换为日期格式。这是我目前所拥有的:
mydate <- function(dataset, column) {
dataset %>% mutate({{column}} := as_date({{column}}))
我希望能够为我创建的“列”参数输入多个列名。与其对 start_date
和 end_date
使用我的 mydate()
函数两次,我希望能够编写这样的代码并使用一行代码将该函数应用于多个列:(有点像select()
函数)
mydate(db_country, start_date, end_date)
如何编辑我的函数来执行此操作?
非常感谢任何帮助:)
你可以这样做:
mydate <- function(dataset, ...)
{
mutate(dataset, across(as.character(ensyms(...)), as_date))
}
允许以下 pipe-friendly 语法:
db_country %>% mydate(start_date, end_date)
#> # A tibble: 3 x 4
#> country region start_date end_date
#> <chr> <chr> <date> <date>
#> 1 Argentina Americas 2020-08-13 2020-08-26
#> 2 Australia Asia 2020-08-13 2020-08-26
#> 3 Austria Europe 2020-08-13 2020-08-26