如何创建将函数应用于数据集中多个列的R函数?

问题描述

这是一个示例数据集:

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}}))

我希望能够为我输入的“ column”参数输入多个列名。我希望能够像这样写一些类似的东西,然后使用一行代码函数应用到多个列上,而不是对mydate()start_date使用我的end_date函数两次:有点像select()函数

mydate(db_country,start_date,end_date)

我该如何编辑我的功能

非常感谢您的帮助:)

解决方法

您可以这样做:

mydate <- function(dataset,...) 
{
  mutate(dataset,across(as.character(ensyms(...)),as_date))
}

其中允许以下管道友好语法:

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