-
Notifications
You must be signed in to change notification settings - Fork 210
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feature request/clarification: %within% for vectors of intervals #658
Labels
bug
an unexpected problem or unintended behavior
Comments
I am labeling this as a bug. All R functions should be vectorized whenever possible. Will have a look before next release. |
I will prepare a reproducible example.
…On Mon, 26 Mar 2018 at 11:07 Vitalie Spinu ***@***.***> wrote:
I am labeling this as a bug. All R functions should be vectorized whenever
possible. Will have a look before next release.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
<#658 (comment)>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AIPm4RUF48YQ8lFN736Onn3ZRQ7kSZPJks5tiS5LgaJpZM4S7ab4>
.
|
library(tidyverse)
library(lubridate)
testdate <- ymd("2015-01-02")
testdate
blackout<- c(interval(ymd("2014-12-30"), ymd("2014-12-31")))
blackout
testdate %within% blackout
# [1] FALSE
blackouts<- c(interval(ymd("2014-12-30"), ymd("2014-12-31")),
interval(ymd("2014-12-30"), ymd("2015-01-03")))
blackouts
testdate %within% blackouts
# [1] FALSE TRUE
#Note testdates is a multiple of blackouts
#
testdates <-c(ymd("2014-12-20", ymd("2014-12-30"), ymd("2015-01-01"), ymd("2015-01-03")))
testdates
testdates %within% blackouts
# [1] FALSE TRUE FALSE TRUE
# But 2015-01-01 is within blackout rule 2
testdates5 <-c(ymd("2014-12-20"), ymd("2014-12-30"), ymd("2015-01-01"), ymd("2015-01-03"), ymd("2015-05-05"))
testdates5
testdates5 %within% blackouts
#[1] FALSE TRUE FALSE TRUE FALSE
#Warning messages:
# 1: In as.numeric(a) - as.numeric(b@start) :
# longer object length is not a multiple of shorter object length
#2: In as.numeric(a) - as.numeric(b@start) <= b@.Data :
# longer object length is not a multiple of shorter object length
#3: In as.numeric(a) - as.numeric(b@start) :
# longer object length is not a multiple of shorter object length
# but Jan 1 2015 is within blackouts[2]
#
#
|
Ok. I have misinterpreted your question. %within% works as expected (that is, it vectorizes over both, input vector and the interval vector). Maybe we can extend |
netbsd-srcmastr
pushed a commit
to NetBSD/pkgsrc
that referenced
this issue
May 30, 2021
Version 1.7.10 ============== ### NEW FEATURES * `fast_strptime()` and `parse_date_time2()` now accept multiple formats and apply them in turn ### BUG FIXES * [#926](tidyverse/lubridate#926) Fix incorrect division of intervals by months involving leap years * Fix incorrect skipping of digits during parsing of the `%z` format Version 1.7.9.2 =============== ### NEW FEATURES * [#914](tidyverse/lubridate#914) New `rollforward()` function * [#928](tidyverse/lubridate#928) On startup lubridate now resets TZDIR to a proper directory when it is set to non-dir values like "internal" or "macOS" (a change introduced in R4.0.2) * [#630](tidyverse/lubridate#630) New parsing functions `ym()` and `my()` ### BUG FIXES * [#930](tidyverse/lubridate#930) `as.period()` on intervals now returns valid Periods with double fields (not integers) Version 1.7.9 ============= ### NEW FEATURES * [#871](tidyverse/lubridate#893) Add `vctrs` support ### BUG FIXES * [#890](tidyverse/lubridate#890) Correctly compute year in `quarter(..., with_year = TRUE)` * [#893](tidyverse/lubridate#893) Fix incorrect parsing of abbreviated months in locales with trailing dot (regression in v1.7.8) * [#886](tidyverse/lubridate#886) Fix `with_tz()` for POSIXlt objects * [#887](tidyverse/lubridate#887) Error on invalid numeric input to `month()` * [#889](tidyverse/lubridate#889) Export new dmonth function Version 1.7.8 ============= ### NEW FEATURES * (breaking) Year and month durations now assume 365.25 days in a year consistently in conversion and constructors. Particularly `dyears(1) == years(1)` is now `TRUE`. * Format and print methods for 0-length objects are more consistent. * New duration constructor `dmonths()` to complement other duration constructors. * * `duration()` constructor now accepts `months` and `years` arguments. * [#629](tidyverse/lubridate#629) Added `format_ISO8601()` methods. * [#672](tidyverse/lubridate#672) Eliminate all partial argument matches * [#674](tidyverse/lubridate#674) `as_date()` now ignores the `tz` argument * [#675](tidyverse/lubridate#675) `force_tz()`, `with_tz()`, `tz<-` convert dates to date-times * [#681](tidyverse/lubridate#681) New constants `NA_Date_` and `NA_POSIXct_` which parallel built-in primitive constants. * [#681](tidyverse/lubridate#681) New constructors `Date()` and `POSIXct()` which parallel built-in primitive constructors. * [#695](tidyverse/lubridate#695) Durations can now be compared with numeric vectors. * [#707](tidyverse/lubridate#707) Constructors return 0-length inputs when called with no arguments * [#713](tidyverse/lubridate#713) (breaking) `as_datetime()` always returns a `POSIXct()` * [#717](tidyverse/lubridate#717) Common generics are now defined in `generics` dependency package. * [#719](tidyverse/lubridate#719) Negative Durations are now displayed with leading `-`. * [#829](tidyverse/lubridate#829) `%within%` throws more meaningful messages when applied on unsupported classes * [#831](tidyverse/lubridate#831) Changing hour, minute or second of Date object now yields POSIXct. * [#869](tidyverse/lubridate#869) Propagate NAs to all internal components of a Period object ### BUG FIXES * [#682](tidyverse/lubridate#682) Fix quarter extraction with small `fiscal_start`s. * [#703](tidyverse/lubridate#703) `leap_year()` works with objects supported by `year()`. * [#778](tidyverse/lubridate#778) `duration()/period()/make_difftime()` work with repeated units * `c.Period` concatenation doesn't fail with empty components. * Honor `exact = TRUE` argument in `parse_date_time2`, which was so far ignored. Version 1.7.4 ============= ### NEW FEATURES * [#658](tidyverse/lubridate#658) `%within%` now accepts a list of intervals, in which case an instant is checked if it occurs within any of the supplied intervals. ### CHANGES * [#661](tidyverse/lubridate#661) Throw error on invalid multi-unit rounding. * [#633](tidyverse/lubridate#633) `%%` on intervals relies on `%m+` arithmetic and doesn't produce NAs when intermediate computations result in non-existent dates. * `tz()` always returns "UTC" when `tzone` attribute cannot be inferred. ### BUG FIXES * [#664](tidyverse/lubridate#664) Fix lookup of period functions in `as.period` * [#649](tidyverse/lubridate#664) Fix system timezone memoization Version 1.7.3 ============= ### BUG FIXES * [#643](tidyverse/lubridate#643), [#640](tidyverse/lubridate#640), [#645](tidyverse/lubridate#645) Fix faulty caching of system timezone.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
%within% works wonderfully for the stated use case: a %within% b,
where a is a date/datetime, and b is an single interval.
But sometimes the user has a vector of intervals, even an unknown number of intervals, and the question is whether is: a %within% B, where B is a vector of intervals (b1, b2, b3...)
Example:given a set of reward blackout dates for a frequent-flyer program, can I book a flight that leaves at a particular time?
A very good solution is found here:
thanks to:https://stackoverflow.com/questions/28682816/match-dates-against-date-intervals-holiday-periods-in-multiple-years
If we assume that df$datetimes holds the flight times , and blackouts$interval holds the blackout intervals we wish to include/exclude, with one record per blackout period:
apply(sapply(df$datetime, function(x) x %within% blackouts$interval),2,any)
works just fine, but its a bit "ugly" in that way that R can be ugly.
So, two suggestions: 1) make explicit within the %within% documentation that %within%t does not work across a vector of intervals 2) perhaps offer a nice purr-ized example of the above for this specific and I suspect common situation.
As always, thanks, thanks and thanks again for the tidyverse!
The text was updated successfully, but these errors were encountered: