问题描述
这是一个示例数据集:
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