From e3b584a89e58d57dc8f217947e4c3504f1c9e8c5 Mon Sep 17 00:00:00 2001 From: Alenka Frim Date: Fri, 7 Jan 2022 08:34:23 +0100 Subject: [PATCH 1/3] Add implementation of lubridate::week --- r/R/dplyr-funcs-datetime.R | 4 ++++ r/tests/testthat/test-dplyr-funcs-datetime.R | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/r/R/dplyr-funcs-datetime.R b/r/R/dplyr-funcs-datetime.R index 2eedc03ad83..0ff42944c0f 100644 --- a/r/R/dplyr-funcs-datetime.R +++ b/r/R/dplyr-funcs-datetime.R @@ -101,6 +101,10 @@ register_bindings_datetime <- function() { Expression$create("day_of_week", x, options = list(count_from_zero = FALSE, week_start = week_start)) }) + register_binding("week", function(x) { + (call_binding("yday", x) - 1) %/% 7 + 1 + }) + register_binding("month", function(x, label = FALSE, abbr = TRUE, locale = Sys.getlocale("LC_TIME")) { if (label) { if (abbr) { diff --git a/r/tests/testthat/test-dplyr-funcs-datetime.R b/r/tests/testthat/test-dplyr-funcs-datetime.R index 2aaaf5c4723..90f52b5712e 100644 --- a/r/tests/testthat/test-dplyr-funcs-datetime.R +++ b/r/tests/testthat/test-dplyr-funcs-datetime.R @@ -385,6 +385,15 @@ test_that("extract epiweek from timestamp", { ) }) +test_that("extract week from timestamp", { + compare_dplyr_binding( + .input %>% + mutate(x = week(datetime)) %>% + collect(), + test_df + ) +}) + test_that("extract day from timestamp", { compare_dplyr_binding( .input %>% From 5cfb0a1d2770894e65262b218cbe07f76c19a38c Mon Sep 17 00:00:00 2001 From: Alenka Frim Date: Mon, 10 Jan 2022 13:49:43 +0100 Subject: [PATCH 2/3] Add a test for date and call C++ function for division --- r/R/dplyr-funcs-datetime.R | 2 +- r/tests/testthat/test-dplyr-funcs-datetime.R | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/r/R/dplyr-funcs-datetime.R b/r/R/dplyr-funcs-datetime.R index 0ff42944c0f..39cd6816599 100644 --- a/r/R/dplyr-funcs-datetime.R +++ b/r/R/dplyr-funcs-datetime.R @@ -102,7 +102,7 @@ register_bindings_datetime <- function() { }) register_binding("week", function(x) { - (call_binding("yday", x) - 1) %/% 7 + 1 + call_binding("%/%", (call_binding("yday", x) - 1), 7) + 1 }) register_binding("month", function(x, label = FALSE, abbr = TRUE, locale = Sys.getlocale("LC_TIME")) { diff --git a/r/tests/testthat/test-dplyr-funcs-datetime.R b/r/tests/testthat/test-dplyr-funcs-datetime.R index 90f52b5712e..c3f79dc13ee 100644 --- a/r/tests/testthat/test-dplyr-funcs-datetime.R +++ b/r/tests/testthat/test-dplyr-funcs-datetime.R @@ -538,6 +538,15 @@ test_that("extract epiweek from date", { ) }) +test_that("extract week from date", { + compare_dplyr_binding( + .input %>% + mutate(x = week(date)) %>% + collect(), + test_df + ) +}) + test_that("extract month from date", { compare_dplyr_binding( .input %>% From 176169693ee30140332919a912c67b1d3317cf01 Mon Sep 17 00:00:00 2001 From: Alenka Frim Date: Mon, 10 Jan 2022 14:50:04 +0100 Subject: [PATCH 3/3] Revert to %/% --- r/R/dplyr-funcs-datetime.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r/R/dplyr-funcs-datetime.R b/r/R/dplyr-funcs-datetime.R index 39cd6816599..0ff42944c0f 100644 --- a/r/R/dplyr-funcs-datetime.R +++ b/r/R/dplyr-funcs-datetime.R @@ -102,7 +102,7 @@ register_bindings_datetime <- function() { }) register_binding("week", function(x) { - call_binding("%/%", (call_binding("yday", x) - 1), 7) + 1 + (call_binding("yday", x) - 1) %/% 7 + 1 }) register_binding("month", function(x, label = FALSE, abbr = TRUE, locale = Sys.getlocale("LC_TIME")) {