Movatterモバイル変換


[0]ホーム

URL:


R-CMD-checkThe API of a maturing package has been roughed out, but finer details likely to change.Coverage statusCRAN status

calendar

The goal of calendar is to make it easy to create, read, write, andwork with iCalander (.ics,.ical or similar)files, and the scheduling data they represent, in R. iCalendar is anopen standard for “exchanging calendar and scheduling informationbetween users and computers” described aticalendar.org (the full spec can befound in a plain text filehere).

Recently the UK Government endorsed the iCal format in apublicationfor the ‘Open Standards for Government’ series.An example.ics file is provided by the .gov.uk domain, which shows holidays inEngland and Wales.

Installation

install.packages("calendar")

Or install the cutting edge from GitHub

devtools::install_github("ATFutures/calendar")
library(calendar)

Example

A minimal example representing the contents of an iCalendar file isprovided in the datasetical_example, which is loaded whenthe package is attached. This is what iCal files look like:

ical_example#>  [1] "BEGIN:VCALENDAR"#>  [2] "PRODID:-//Google Inc//Google Calendar 70.9054//EN"#>  [3] "VERSION:2.0"#>  [4] "CALSCALE:GREGORIAN"#>  [5] "METHOD:PUBLISH"#>  [6] "X-WR-CALNAME:atf-test"#>  [7] "X-WR-TIMEZONE:Europe/London"#>  [8] "BEGIN:VEVENT"#>  [9] "DTSTART:20180809T160000Z"#> [10] "DTEND:20180809T163000Z"#> [11] "DTSTAMP:20180810T094100Z"#> [12] "UID:1119ejg4vug5758527atjcrqj3@google.com"#> [13] "CREATED:20180807T133712Z"#> [14] "DESCRIPTION:\\n"#> [15] "LAST-MODIFIED:20180807T133712Z"#> [16] "LOCATION:"#> [17] "SEQUENCE:0"#> [18] "STATUS:CONFIRMED"#> [19] "SUMMARY:ical programming mission"#> [20] "TRANSP:OPAQUE"#> [21] "END:VEVENT"#> [22] "END:VCALENDAR"

Relevant fields can be found and extracted as follows:

which(ic_find(ical_example,"TSTAMP"))#> [1] 11ic_extract(ical_example,"TSTAMP")#> [1] "D20180810T094100Z"

A larger example shows all national holidays in England and Wales. Itcan be read-in as follows:

ics_file<-system.file("extdata","england-and-wales.ics",package ="calendar")ics_raw=readLines(ics_file)head(ics_raw)# check it's in the ICS format#> [1] "BEGIN:VCALENDAR"#> [2] "VERSION:2.0"#> [3] "METHOD:PUBLISH"#> [4] "PRODID:-//uk.gov/GOVUK calendars//EN"#> [5] "CALSCALE:GREGORIAN"#> [6] "BEGIN:VEVENT"

A list representation of the calendar can be created usingic_list() as follows:

ics_list=ic_list(ics_raw)ics_list[1:2]#> [[1]]#> [1] "DTEND;VALUE=DATE:20120103"#> [2] "DTSTART;VALUE=DATE:20120102"#> [3] "SUMMARY:New Year’s Day"#> [4] "UID:ca6af7456b0088abad9a69f9f620f5ac-0@gov.uk"#> [5] "SEQUENCE:0"#> [6] "DTSTAMP:20180806T114130Z"#>#> [[2]]#> [1] "DTEND;VALUE=DATE:20120407"#> [2] "DTSTART;VALUE=DATE:20120406"#> [3] "SUMMARY:Good Friday"#> [4] "UID:ca6af7456b0088abad9a69f9f620f5ac-1@gov.uk"#> [5] "SEQUENCE:0"#> [6] "DTSTAMP:20180806T114130Z"

A data frame representing the calendar can be created as follows(work in progress):

ics_df=ic_read(ics_file)# read it inhead(ics_df)# check the results#> # A tibble: 6 × 6#>   `DTEND;VALUE=DATE` `DTSTART;VALUE=DATE` SUMMARY         UID   SEQUENCE DTSTAMP#>   <date>             <date>               <chr>           <chr> <chr>    <chr>#> 1 2012-01-03         2012-01-02           New Year’s Day  ca6a… 0        201808…#> 2 2012-04-07         2012-04-06           Good Friday     ca6a… 0        201808…#> 3 2012-04-10         2012-04-09           Easter Monday   ca6a… 0        201808…#> 4 2012-05-08         2012-05-07           Early May bank… ca6a… 0        201808…#> 5 2012-06-05         2012-06-04           Spring bank ho… ca6a… 0        201808…#> 6 2012-06-06         2012-06-05           Queen’s Diamon… ca6a… 0        201808…

What class is each column?

vapply(ics_df, class,character(1))#>   DTEND;VALUE=DATE DTSTART;VALUE=DATE            SUMMARY                UID#>             "Date"             "Date"        "character"        "character"#>           SEQUENCE            DTSTAMP#>        "character"        "character"

Trying on calendars ‘in thewild’

To make the package robust we test on a wide range of ical formats.Here’s an example from my work calendar, for example:

my_cal=ic_dataframe(ical_outlook)my_cal$SUMMARY[1]#> [1] "In Budapest for European R Users Meeting (eRum) conference"# calculate the duration of the European R users meeting event:my_cal$`DTEND;VALUE=DATE`[1]- my_cal$`DTSTART;VALUE=DATE`[1]#> Time difference of 4 days

Related projects


[8]ページ先頭

©2009-2025 Movatter.jp