Oto przykładowy zbiór danych:

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

Próbuję dokonać funkcji, która konwertuje wszystkie wartości w kolumnie w format data. To właśnie mam do tej pory:

mydate <- function(dataset, column) {
  dataset %>% mutate({{column}} := as_date({{column}}))

Chcę mieć możliwość wprowadzenia wielu nazw kolumn dla argumentu "kolumny", którą wykonałem. Zamiast używać mojego mydate() funkcji dwukrotnie dla start_date i end_date, chcę być w stanie napisać coś w ten sposób i zastosować funkcję do więcej niż jednej kolumny za pomocą jednej linii kodu: ( Trochę jak funkcja select())

mydate(db_country, start_date, end_date)

Jak mogę edytować moją funkcję, aby to zrobić?

Każda pomoc jest mile widziana :)

1
Karima 26 październik 2020, 17:30

1 odpowiedź

Najlepsza odpowiedź

Możesz to zrobić:

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

Co pozwala na następną składnię przyjazną rurą:

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

3
Allan Cameron 26 październik 2020, 14:47