datefixR

🗓 Standardize messy date data into consistent, machine-readable, formats

https://github.com/ropensci/datefixr

Science Score: 77.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • ✓
    CITATION.cff file
    Found CITATION.cff file
  • ✓
    codemeta.json file
    Found codemeta.json file
  • ✓
    .zenodo.json file
    Found .zenodo.json file
  • ✓
    DOI references
    Found 3 DOI reference(s) in README
  • ✓
    Academic publication links
    Links to: zenodo.org
  • ✓
    Committers with academic emails
    1 of 13 committers (7.7%) from academic institutions
  • â—‹
    Institutional organization owner
  • â—‹
    JOSS paper metadata
  • â—‹
    Scientific vocabulary similarity
    Low similarity (14.6%) to scientific vocabulary

Keywords

dates r r-package rstats wrangling

Keywords from Contributors

sequences optim geocoding interactive annotation clade embedded agents book gaming
Last synced: 6 months ago · JSON representation ·

Repository

🗓 Standardize messy date data into consistent, machine-readable, formats

Basic Info
Statistics
  • Stars: 33
  • Watchers: 3
  • Forks: 4
  • Open Issues: 5
  • Releases: 16
Topics
dates r r-package rstats wrangling
Created over 4 years ago · Last pushed 6 months ago
Metadata Files
Readme Changelog Contributing License Citation Codemeta

README.Rmd

---
output:
  github_document:
    html_preview: false
editor_options: 
  markdown: 
    wrap: 80
---



```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
```

# datefixR 


| Usage                                                                                                                                 | Release                                                                                                            | Development   | Translation Status |
|---------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------|
| ![R](https://img.shields.io/badge/r-%23276DC3.svg?style=for-the-badge&logo=r&logoColor=white)                      | [![CRAN_Status_Badge](https://www.r-pkg.org/badges/version/datefixR)](https://cran.r-project.org/package=datefixR) | ![Rust language](https://img.shields.io/badge/Rust-D34516?style=for-the-badge&logo=rust&logoColor=#E57324) |[![German localization ](https://gitlocalize.com/repo/8364/de/badge.svg)](https://gitlocalize.com/repo/8364/de?utm_source=badge)  | 
| [![License: GPL-3](https://img.shields.io/badge/License-GPL3-green.svg)](https://opensource.org/license/gpl-3-0)                                       | [![datefixR status badge](https://ropensci.r-universe.dev/badges/datefixR)](https://ropensci.r-universe.dev/datefixR)     | [![R build status](https://github.com/ropensci/datefixR/workflows/CI/badge.svg)](https://github.com/ropensci/datefixR/actions) | [![Spanish localization ](https://gitlocalize.com/repo/8364/es/badge.svg)](https://gitlocalize.com/repo/8364/es?utm_source=badge)                                                    |
| [![CRAN RStudio mirror downloads](https://cranlogs.r-pkg.org/badges/grand-total/datefixR?color=blue)](https://r-pkg.org/pkg/datefixR) | [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.5655311.svg)](https://doi.org/10.5281/zenodo.5655311)          | [![Project Status: Active – The project has reached a stable, usable state and is being actively developed.](https://www.repostatus.org/badges/latest/active.svg)](https://www.repostatus.org/#active) | [![French localization](https://gitlocalize.com/repo/8364/fr/badge.svg)](https://gitlocalize.com/repo/8364/fr?utm_source=badge)|
| ![website status](https://img.shields.io/website?down_color=red&down_message=offline&up_color=green&up_message=online&url=https%3A%2F%2Fdocs.ropensci.org%2FdatefixR%2F) | [![Status at rOpenSci Software Peer Review](https://badges.ropensci.org/533_status.svg)](https://github.com/ropensci/software-review/issues/533) | [![codecov](https://codecov.io/gh/ropensci/datefixR/branch/main/graph/badge.svg?token=zycOVwlq1m)](https://app.codecov.io/gh/ropensci/datefixR) |[![Indonesian localization](https://gitlocalize.com/repo/8364/id/badge.svg)](https://gitlocalize.com/repo/8364/id?utm_source=badge) |
| | | [![Tidyverse style guide](https://img.shields.io/static/v1?label=Code%20Style&message=Tidyverse&color=1f1c30)](https://style.tidyverse.org) | [![Russian localization](https://gitlocalize.com/repo/8364/ru/badge.svg)](https://gitlocalize.com/repo/8364/ru?utm_source=badge) |


**`datefixR` is an R package that automatically standardizes messy date data into consistent, machine-readable formats.**
Whether you're dealing with free-text web form entries like "02 05 92",
"2020-may-01", or "le 3 mars 2013", `datefixR` intelligently parses diverse date
formats and converts them to R's standard Date class. Under the hood, `datefixR`
uses Rust for fast and memory-safe parsing.

**Key features:**

- **Smart parsing**: Handles mixed date formats, separators, and representations
  in a single dataset.
- **Multilingual support**: Recognizes dates in English, French, German,
  Spanish, Indonesian, and Russian.
- **Missing data imputation**: User-controlled behavior for incomplete dates
  (missing days/months).
- **Error reporting**: If a date cannot be parsed, the user is informed of the
  provided date and associated row ID, allowing for easier debugging and
  correction.
- **Excel compatibility**: Supports both R and Excel numeric date
  representations.
- **Shiny integration**: Interactive web app for data exploration and cleaning.

## Quick Start Here's a simple example showing how `datefixR` cleans messy date data: ```{R} library(datefixR) # Create some messy date data messy_dates <- c("02/05/92", "2020-may-01", "le 3 mars 2013", "1996") messy_df <- data.frame(id = 1:4, dates = messy_dates) print(messy_df) # Clean the dates clean_dates <- fix_date_char(messy_dates) # Clean a character vector clean_df <- fix_date_df(messy_df, "dates") # Clean a column of a dataframe print(clean_df) ``` The package automatically standardizes dates in different formats (named months, various separators, incomplete dates) into R's standard `yyyy-mm-dd` format. When dates are partially missing (like the day or month), they can be imputed. Whilst imputation defaults to July 1st for incomplete dates, this behaviour can be changed including the prevention of any imputation. ## Installation ### Stable Release (Recommended) `datefixR` is available on CRAN: ```{R Cran, eval = FALSE} install.packages("datefixR") ``` ### Latest Stable (r-universe) For the most up-to-date stable version via [r-universe](https://r-universe.dev/search): ```{R dev, eval = FALSE} # Enable universe(s) by ropensci options(repos = c( ropensci = "https://ropensci.r-universe.dev", CRAN = "https://cloud.r-project.org" )) install.packages("datefixR") ``` ## Getting Started ## Package vignette `datefixR` has a "Getting Started" vignette which describes how to use this package in more detail than this page. View the vignette by either calling ```{R, eval = FALSE} browseVignettes("datefixR") ``` or visiting the vignette on the [package website](https://docs.ropensci.org/datefixR/articles/datefixR.html) Additional vignettes are available describing `datefixR`'s localization features and how to use the Shiny app. ## Usage `datefixR` provides flexible date standardization capabilities across different data structures and formats. This section demonstrates various use cases with practical examples. ### Character Vector Cleaning The most basic use case involves cleaning a character vector of messy dates using `fix_date_char()`: ```{r char-vector-example} library(datefixR) # Mixed format dates messy_dates <- c( "02/05/92", # US format, 2-digit year "2020-may-01", # ISO with named month "le 3 mars 2013", # French format "1996", # Year only "22.07.1977", # European format "jan 2020" # Month-year only ) # Clean all dates at once clean_dates <- fix_date_char(messy_dates) print(clean_dates) ``` This function automatically handles various separators ("-", "/", ".", spaces), different date orders, named months in multiple languages, and incomplete dates. ### Data Frame Cleaning For structured data, use `fix_date_df()` to clean multiple date columns simultaneously: ```{r df-example} # Load example dataset data("exampledates") knitr::kable(exampledates) # Fix multiple columns fixed_df <- fix_date_df(exampledates, c("some.dates", "some.more.dates")) knitr::kable(fixed_df) ``` The function preserves non-date columns and provides detailed error reporting if any dates fail to parse. ### Excel Serial Numbers `datefixR` supports both R and Excel numeric date representations: ```{r excel-serial-example} # R serial dates (days since 1970-01-01) r_serial <- "19539" # Represents 2023-07-01 fix_date_char(r_serial) # Excel serial dates (days since 1900-01-01, accounting for Excel's leap year bug) excel_serial <- "45108" # Also represents 2023-07-01 fix_date_char(excel_serial, excel = TRUE) # Mixed serial and text dates mixed_dates <- c("45108", "2023-07-01", "july 1 2023") fix_date_char(mixed_dates, excel = TRUE) ``` This is particularly useful when importing data from Excel spreadsheets where dates may have been converted to serial numbers. ### MDY vs DMY Detection By default, `datefixR` assumes day-first (DMY) over month-first format when the date order is ambiguous. However, you can specify month-first (MDY) format: ```{r mdy-dmy-example} # Ambiguous dates that could be interpreted as either MDY or DMY ambiguous_dates <- c("01/02/2023", "03/04/2023", "05/06/2023") # Default: Day-first (DMY) interpretation dmy_result <- fix_date_char(ambiguous_dates) print(dmy_result) # Month-first (MDY) interpretation mdy_result <- fix_date_char(ambiguous_dates, format = "mdy") print(mdy_result) ``` ### Missing Day/Month Imputation `datefixR` provides flexible control over how missing date components are imputed: ```{r imputation-example} # Incomplete dates requiring imputation incomplete_dates <- c("2023", "05/2023", "2023-08", "march 2022") # Default imputation: missing month = July (07), missing day = 1st default_impute <- fix_date_char(incomplete_dates) print(default_impute) # Custom imputation: missing month = January (01), missing day = 15th custom_impute <- fix_date_char(incomplete_dates, month.impute = 1, day.impute = 15 ) print(custom_impute) # For data frames, apply the same logic incomplete_df <- data.frame( id = 1:4, dates = incomplete_dates ) fixed_incomplete <- fix_date_df(incomplete_df, "dates", month.impute = 12, # December day.impute = 31 ) # Last day knitr::kable(fixed_incomplete) ``` This flexibility allows you to choose imputation strategies that make sense for your specific use case (e.g., fiscal year starts, survey periods, etc.). ### Roman Numerals `datefixR` can handle Roman numerals being used to denote the month, a format sometimes used by Oracle Database: ```{r roman-example} # Roman numeral months roman_dates <- c( "15.VII.2023", # July 15, 2023 "3.XII.1999", # December 3, 1999 "1.I.2000" # January 1, 2000 ) fix_date_char(roman_dates, roman.numeral = TRUE) ``` Roman numeral support is experimental and has to be explicitly enabled via `roman.numeral = TRUE`. ## Performance This package has recently been optimized for speed using Rust and is now over 300x faster than the largely pure R implementation used in previous versions. Moreover, a fastpath approach has been implemented for common date formats, further improving performance in most situations. Finally, `fix_date_df()` now supports parallelism over columns via the `cores` argument (or via the `'Ncpus'` global option). As such, speed is now very unlikely to be an issue when using `datefixR` on large datasets. ## Limitations Date and time data are often reported together in the same variable (known as "datetime"). However datetime formats are not supported by `datefixR`. The current rationale is this package is mostly used to handle dates entered via free text web forms and it is much less common for both date and time to be reported together in this input method. However, if there is significant demand for support for datetime data in the future this may added. ## Similar packages to datefixR Please note this section is not regularly updated and may be out-of-date by the the time you read it. ### `lubridate` [`lubridate::guess_formats()`](https://lubridate.tidyverse.org/reference/guess_formats.html) can be used to guess a date format and [`lubridate::parse_date_time()`](https://lubridate.tidyverse.org/reference/parse_date_time.html) calls this function when it attempts to parse a vector into a POSIXct date-time object. However: 1. When a date fails to parse in `{lubridate}` then the user is simply told how many dates failed to parse. In `datefixR` the user is told the ID (assumed to be the first column by default but can be user-specified) corresponding to the date which failed to parse and reports the considered date: making it much easier to figure out which dates supplied failed to parse and why. 2. When imputing a missing day or month, there is no user-control over this behavior. For example, when imputing a missing month, the user may wish to impute July, the middle of the year, instead of January. However, January will always be imputed in `{lubridate}`. In `datefixR`, this behavior can be controlled by the `month.impute` argument. 3. These functions require all possible date formats to be specified in the `orders` argument, which may result in a date format not being considered if the user forgets to list one of the possible formats. By contrast, `datefixR` only needs a format to be specified if month-first is to be preferred over day-first when guessing a date. However, `{lubridate}` of course excels in general date manipulation and is an excellent tool to use alongside `datefixR`. ### `anytime` An alternative function is [`anytime::anydate()`](https://dirk.eddelbuettel.com/code/anytime.html) which also attempts to convert dates to a consistent format (R's `{Date}`). However, `anydate()` does not allow the user to control how missing days or months are imputed (defaulting to the 1st day/month) and assumes dates with missing components are in YMD format. ```{R} suppressWarnings(anytime::anydate("May 1994")) anytime::anydate("1994 May") ``` Two digit years are also not supported. ```{R} suppressWarnings(anytime::anydate("01/05/94")) anytime::anydate("01/05/1994") ``` ### `parsedate` `parsedate::parse_date()` also attempts to solve the problem of handling arbitrary dates and parses dates into the `POSIXct` type. Unfortunately, `parse_date()` cannot handle years before 1970 -- instead imputing the year as the current year without any warnings being raised. ```{R} parsedate::parse_date("april 15 1969") ``` Moreover, `parse_date()` assumes dates are in MDY format and does not allow the user to specify otherwise. However, `{parsedate}` has excellent support for handling dates in ISO 8601 formats. ### `stringi`, `readr`, and `clock` These packages all use [ICU library](https://unicode-org.github.io/icu/userguide/format_parse/datetime/) when parsing dates (via `stringi::stri_datetime_parse()`, `readr::parse_date()`, or `clock::date_parse()`) and therefore all behave very similarly. Notably, all of these functions require the date format to be specified including specifying a priori if a date is missing. Ultimately, this makes these packages unsuitable when numerous dates in different formats must be parsed. ```{R} readr::parse_date("02/2010", "%m/%Y") ``` However, these packages have support for weekdays and months in around 211 locales whereas `datefixR` supports much fewer languages due to support for additional languages needing to be implemented individually and by hand. **Trade-offs to consider:** - **`datefixR`**: Better error reporting, flexible imputation, handles mixed formats automatically. Fast. - **`lubridate`**: Requires format specification, limited imputation control - **`stringi`/`readr`/`clock`**: Require exact format specification, supports 211 locales - **`anytime`**: Variable performance, no imputation support, silent failures For messy, mixed-format data where usability and error handling are priorities, `datefixR` shines. Now that the core logic is handled in Rust, performance has improved significantly making it suitable for very large datasets. ## Contributing to datefixR If you are interested in contributing to `datefixR`, please read our [contributing guide](https://github.com/ropensci/datefixR/blob/main/.github/CONTRIBUTING.md). Please note that this package is released with a [Contributor Code of Conduct](https://ropensci.org/code-of-conduct/). By contributing to this project, you agree to abide by its terms. ## Citation If you use this package in your research, please consider citing `datefixR`! An up-to-date citation can be obtained by running ```{R, results = "hide"} citation("datefixR") ```

Owner

  • Name: rOpenSci
  • Login: ropensci
  • Kind: organization
  • Email: info@ropensci.org
  • Location: Berkeley, CA

Citation (CITATION.cff)

# --------------------------------------------
# CITATION file created with {cffr} R package
# See also: https://docs.ropensci.org/cffr/
# --------------------------------------------
 
cff-version: 1.2.0
message: 'To cite package "datefixR" in publications use:'
type: software
license: GPL-3.0-or-later
title: 'datefixR: Standardize Dates in Different Formats or with Missing Data'
version: 2.0.0
doi: 10.5281/zenodo.5655311
identifiers:
- type: doi
  value: 10.32614/CRAN.package.datefixR
abstract: 'There are many different formats dates are commonly represented with: the
  order of day, month, or year can differ, different separators ("-", "/", or whitespace)
  can be used, months can be numerical, names, or abbreviations and year given as
  two digits or four. ''datefixR'' takes dates in all these different formats and
  converts them to R''s built-in date class. If ''datefixR'' cannot standardize a
  date, such as because it is too malformed, then the user is told which date cannot
  be standardized and the corresponding ID for the row. ''datefixR'' also allows the
  imputation of missing days and months with user-controlled behavior.'
authors:
- family-names: Constantine-Cooke
  given-names: Nathan
  email: nathan.constantine-cooke@ed.ac.uk
  orcid: https://orcid.org/0000-0002-4437-8713
preferred-citation:
  type: manual
  title: 'datefixR: Standardize Dates in Different Formats or with Missing Data'
  authors:
  - family-names: Constantine-Cooke
    given-names: Nathan
    email: nathan.constantine-cooke@ed.ac.uk
    orcid: https://orcid.org/0000-0002-4437-8713
  year: '2025'
  notes: R package version 2.0.0
  doi: 10.5281/zenodo.5655311
  url: https://CRAN.R-project.org/package=datefixR
repository: https://CRAN.R-project.org/package=datefixR
repository-code: https://github.com/ropensci/datefixR
url: https://docs.ropensci.org/datefixR/
contact:
- family-names: Constantine-Cooke
  given-names: Nathan
  email: nathan.constantine-cooke@ed.ac.uk
  orcid: https://orcid.org/0000-0002-4437-8713
keywords:
- dates
- r
- r-package
- rstats
- wrangling
references:
- type: software
  title: 'R: A Language and Environment for Statistical Computing'
  notes: Depends
  url: https://www.R-project.org/
  authors:
  - name: R Core Team
  institution:
    name: R Foundation for Statistical Computing
    address: Vienna, Austria
  year: '2025'
  version: '>= 4.2'
- type: software
  title: lifecycle
  abstract: 'lifecycle: Manage the Life Cycle of your Package Functions'
  notes: Imports
  url: https://lifecycle.r-lib.org/
  repository: https://CRAN.R-project.org/package=lifecycle
  authors:
  - family-names: Henry
    given-names: Lionel
    email: lionel@posit.co
  - family-names: Wickham
    given-names: Hadley
    email: hadley@posit.co
    orcid: https://orcid.org/0000-0003-4757-117X
  year: '2025'
  doi: 10.32614/CRAN.package.lifecycle
- type: software
  title: rlang
  abstract: 'rlang: Functions for Base Types and Core R and ''Tidyverse'' Features'
  notes: Imports
  url: https://rlang.r-lib.org
  repository: https://CRAN.R-project.org/package=rlang
  authors:
  - family-names: Henry
    given-names: Lionel
    email: lionel@posit.co
  - family-names: Wickham
    given-names: Hadley
    email: hadley@posit.co
  year: '2025'
  doi: 10.32614/CRAN.package.rlang
- type: software
  title: DT
  abstract: 'DT: A Wrapper of the JavaScript Library ''DataTables'''
  notes: Suggests
  url: https://github.com/rstudio/DT
  repository: https://CRAN.R-project.org/package=DT
  authors:
  - family-names: Xie
    given-names: Yihui
  - family-names: Cheng
    given-names: Joe
    email: joe@posit.co
  - family-names: Tan
    given-names: Xianying
  year: '2025'
  doi: 10.32614/CRAN.package.DT
- type: software
  title: future
  abstract: 'future: Unified Parallel and Distributed Processing in R for Everyone'
  notes: Suggests
  url: https://future.futureverse.org
  repository: https://CRAN.R-project.org/package=future
  authors:
  - family-names: Bengtsson
    given-names: Henrik
    email: henrikb@braju.com
    orcid: https://orcid.org/0000-0002-7579-5165
  year: '2025'
  doi: 10.32614/CRAN.package.future
- type: software
  title: future.apply
  abstract: 'future.apply: Apply Function to Elements in Parallel using Futures'
  notes: Suggests
  url: https://future.apply.futureverse.org
  repository: https://CRAN.R-project.org/package=future.apply
  authors:
  - family-names: Bengtsson
    given-names: Henrik
    email: henrikb@braju.com
    orcid: https://orcid.org/0000-0002-7579-5165
  year: '2025'
  doi: 10.32614/CRAN.package.future.apply
- type: software
  title: htmltools
  abstract: 'htmltools: Tools for HTML'
  notes: Suggests
  url: https://rstudio.github.io/htmltools/
  repository: https://CRAN.R-project.org/package=htmltools
  authors:
  - family-names: Cheng
    given-names: Joe
    email: joe@posit.co
  - family-names: Sievert
    given-names: Carson
    email: carson@posit.co
    orcid: https://orcid.org/0000-0002-4958-2844
  - family-names: Schloerke
    given-names: Barret
    email: barret@posit.co
    orcid: https://orcid.org/0000-0001-9986-114X
  - family-names: Chang
    given-names: Winston
    email: winston@posit.co
    orcid: https://orcid.org/0000-0002-1576-2126
  - family-names: Xie
    given-names: Yihui
    email: yihui@posit.co
  - family-names: Allen
    given-names: Jeff
  year: '2025'
  doi: 10.32614/CRAN.package.htmltools
- type: software
  title: knitr
  abstract: 'knitr: A General-Purpose Package for Dynamic Report Generation in R'
  notes: Suggests
  url: https://yihui.org/knitr/
  repository: https://CRAN.R-project.org/package=knitr
  authors:
  - family-names: Xie
    given-names: Yihui
    email: xie@yihui.name
    orcid: https://orcid.org/0000-0003-0645-5666
  year: '2025'
  doi: 10.32614/CRAN.package.knitr
- type: software
  title: parsedate
  abstract: 'parsedate: Recognize and Parse Dates in Various Formats, Including All
    ISO 8601 Formats'
  notes: Suggests
  url: https://github.com/gaborcsardi/parsedate
  repository: https://CRAN.R-project.org/package=parsedate
  authors:
  - family-names: Csárdi
    given-names: Gábor
    email: csardi.gabor@gmail.com
  - family-names: Torvalds
    given-names: Linus
  year: '2025'
  doi: 10.32614/CRAN.package.parsedate
- type: software
  title: pkgbuild
  abstract: 'pkgbuild: Find Tools Needed to Build R Packages'
  notes: Suggests
  url: https://pkgbuild.r-lib.org
  repository: https://CRAN.R-project.org/package=pkgbuild
  authors:
  - family-names: Wickham
    given-names: Hadley
  - family-names: Hester
    given-names: Jim
  - family-names: Csárdi
    given-names: Gábor
    email: csardi.gabor@gmail.com
  year: '2025'
  doi: 10.32614/CRAN.package.pkgbuild
- type: software
  title: png
  abstract: 'png: Read and write PNG images'
  notes: Suggests
  url: http://www.rforge.net/png/
  repository: https://CRAN.R-project.org/package=png
  authors:
  - family-names: Urbanek
    given-names: Simon
    email: Simon.Urbanek@r-project.org
  year: '2025'
  doi: 10.32614/CRAN.package.png
- type: software
  title: readr
  abstract: 'readr: Read Rectangular Text Data'
  notes: Suggests
  url: https://readr.tidyverse.org
  repository: https://CRAN.R-project.org/package=readr
  authors:
  - family-names: Wickham
    given-names: Hadley
    email: hadley@posit.co
  - family-names: Hester
    given-names: Jim
  - family-names: Bryan
    given-names: Jennifer
    email: jenny@posit.co
    orcid: https://orcid.org/0000-0002-6983-2759
  year: '2025'
  doi: 10.32614/CRAN.package.readr
- type: software
  title: readxl
  abstract: 'readxl: Read Excel Files'
  notes: Suggests
  url: https://readxl.tidyverse.org
  repository: https://CRAN.R-project.org/package=readxl
  authors:
  - family-names: Wickham
    given-names: Hadley
    email: hadley@posit.co
    orcid: https://orcid.org/0000-0003-4757-117X
  - family-names: Bryan
    given-names: Jennifer
    email: jenny@posit.co
    orcid: https://orcid.org/0000-0002-6983-2759
  year: '2025'
  doi: 10.32614/CRAN.package.readxl
- type: software
  title: rmarkdown
  abstract: 'rmarkdown: Dynamic Documents for R'
  notes: Suggests
  url: https://pkgs.rstudio.com/rmarkdown/
  repository: https://CRAN.R-project.org/package=rmarkdown
  authors:
  - family-names: Allaire
    given-names: JJ
    email: jj@posit.co
  - family-names: Xie
    given-names: Yihui
    email: xie@yihui.name
    orcid: https://orcid.org/0000-0003-0645-5666
  - family-names: Dervieux
    given-names: Christophe
    email: cderv@posit.co
    orcid: https://orcid.org/0000-0003-4474-2498
  - family-names: McPherson
    given-names: Jonathan
    email: jonathan@posit.co
  - family-names: Luraschi
    given-names: Javier
  - family-names: Ushey
    given-names: Kevin
    email: kevin@posit.co
  - family-names: Atkins
    given-names: Aron
    email: aron@posit.co
  - family-names: Wickham
    given-names: Hadley
    email: hadley@posit.co
  - family-names: Cheng
    given-names: Joe
    email: joe@posit.co
  - family-names: Chang
    given-names: Winston
    email: winston@posit.co
  - family-names: Iannone
    given-names: Richard
    email: rich@posit.co
    orcid: https://orcid.org/0000-0003-3925-190X
  year: '2025'
  doi: 10.32614/CRAN.package.rmarkdown
- type: software
  title: shiny
  abstract: 'shiny: Web Application Framework for R'
  notes: Suggests
  url: https://shiny.posit.co/
  repository: https://CRAN.R-project.org/package=shiny
  authors:
  - family-names: Chang
    given-names: Winston
    email: winston@posit.co
    orcid: https://orcid.org/0000-0002-1576-2126
  - family-names: Cheng
    given-names: Joe
    email: joe@posit.co
  - family-names: Allaire
    given-names: JJ
    email: jj@posit.co
  - family-names: Sievert
    given-names: Carson
    email: carson@posit.co
    orcid: https://orcid.org/0000-0002-4958-2844
  - family-names: Schloerke
    given-names: Barret
    email: barret@posit.co
    orcid: https://orcid.org/0000-0001-9986-114X
  - family-names: Xie
    given-names: Yihui
    email: yihui@posit.co
  - family-names: Allen
    given-names: Jeff
  - family-names: McPherson
    given-names: Jonathan
    email: jonathan@posit.co
  - family-names: Dipert
    given-names: Alan
  - family-names: Borges
    given-names: Barbara
  year: '2025'
  doi: 10.32614/CRAN.package.shiny
- type: software
  title: shinytest2
  abstract: 'shinytest2: Testing for Shiny Applications'
  notes: Suggests
  url: https://rstudio.github.io/shinytest2/
  repository: https://CRAN.R-project.org/package=shinytest2
  authors:
  - family-names: Schloerke
    given-names: Barret
    email: barret@posit.co
    orcid: https://orcid.org/0000-0001-9986-114X
  year: '2025'
  doi: 10.32614/CRAN.package.shinytest2
- type: software
  title: spelling
  abstract: 'spelling: Tools for Spell Checking in R'
  notes: Suggests
  url: https://ropensci.r-universe.dev/spelling
  repository: https://CRAN.R-project.org/package=spelling
  authors:
  - family-names: Ooms
    given-names: Jeroen
    email: jeroenooms@gmail.com
    orcid: https://orcid.org/0000-0002-4035-0289
  - family-names: Hester
    given-names: Jim
    email: james.hester@rstudio.com
  year: '2025'
  doi: 10.32614/CRAN.package.spelling
- type: software
  title: testthat
  abstract: 'testthat: Unit Testing for R'
  notes: Suggests
  url: https://testthat.r-lib.org
  repository: https://CRAN.R-project.org/package=testthat
  authors:
  - family-names: Wickham
    given-names: Hadley
    email: hadley@posit.co
  year: '2025'
  doi: 10.32614/CRAN.package.testthat
  version: '>= 3.0.0'
- type: software
  title: withr
  abstract: 'withr: Run Code ''With'' Temporarily Modified Global State'
  notes: Suggests
  url: https://withr.r-lib.org
  repository: https://CRAN.R-project.org/package=withr
  authors:
  - family-names: Hester
    given-names: Jim
  - family-names: Henry
    given-names: Lionel
    email: lionel@posit.co
  - family-names: Müller
    given-names: Kirill
    email: krlmlr+r@mailbox.org
  - family-names: Ushey
    given-names: Kevin
    email: kevinushey@gmail.com
  - family-names: Wickham
    given-names: Hadley
    email: hadley@posit.co
  - family-names: Chang
    given-names: Winston
  year: '2025'
  doi: 10.32614/CRAN.package.withr

CodeMeta (codemeta.json)

{
  "@context": "https://doi.org/10.5063/schema/codemeta-2.0",
  "@type": "SoftwareSourceCode",
  "identifier": "datefixR",
  "description": "There are many different formats dates are commonly represented with: the order of day, month, or year can differ, different separators (\"-\", \"/\", or whitespace) can be used, months can be numerical, names, or abbreviations and year given as two digits or four. 'datefixR' takes dates in all these different formats and converts them to R's built-in date class. If 'datefixR' cannot standardize a date, such as because it is too malformed, then the user is told which date cannot be standardized and the corresponding ID for the row. 'datefixR' also allows the imputation of missing days and months with user-controlled behavior.",
  "name": "datefixR: Standardize Dates in Different Formats or with Missing Data",
  "relatedLink": "https://docs.ropensci.org/datefixR/",
  "codeRepository": "https://github.com/ropensci/datefixR",
  "issueTracker": "https://github.com/ropensci/datefixR/issues",
  "license": "https://spdx.org/licenses/GPL-3.0",
  "version": "2.0.0",
  "programmingLanguage": {
    "@type": "ComputerLanguage",
    "name": "R",
    "url": "https://r-project.org"
  },
  "runtimePlatform": "R version 4.5.1 (2025-06-13)",
  "provider": {
    "@id": "https://cran.r-project.org",
    "@type": "Organization",
    "name": "Comprehensive R Archive Network (CRAN)",
    "url": "https://cran.r-project.org"
  },
  "author": [
    {
      "@type": "Person",
      "givenName": "Nathan",
      "familyName": "Constantine-Cooke",
      "email": "nathan.constantine-cooke@ed.ac.uk",
      "@id": "https://orcid.org/0000-0002-4437-8713"
    }
  ],
  "contributor": [
    {
      "@type": "Person",
      "givenName": "Jonathan",
      "familyName": "Kitt",
      "email": "jonathan.kitt@protonmail.com"
    },
    {
      "@type": "Person",
      "givenName": "Antonio J.",
      "familyName": "Prez-Luque",
      "email": "ajpelu@gmail.com",
      "@id": "https://orcid.org/0000-0002-1747-0469"
    },
    {
      "@type": "Person",
      "givenName": "Daniel",
      "familyName": "Possenriede",
      "email": "possenriede+r@gmail.com",
      "@id": "https://orcid.org/0000-0002-6738-9845"
    },
    {
      "@type": "Person",
      "givenName": "Michal",
      "familyName": "Lauer",
      "email": "michal.lauer.25@gmail.com"
    },
    {
      "@type": "Person",
      "givenName": "Anatoly",
      "familyName": "Tsyplenkov",
      "email": "atsyplenkov@gmail.com",
      "@id": "https://orcid.org/0000-0003-4144-8402"
    },
    {
      "@type": "Person",
      "givenName": "Chitra M.",
      "familyName": "Saraswati",
      "email": "chitra.m.saraswati@gmail.com",
      "@id": "https://orcid.org/0000-0002-8159-0414"
    },
    {
      "@type": "Person",
      "givenName": "Jonathan",
      "familyName": "Kitt",
      "email": "jonathan.kitt@protonmail.com"
    },
    {
      "@type": "Person",
      "givenName": "Antonio J.",
      "familyName": "Prez-Luque",
      "email": "ajpelu@gmail.com",
      "@id": "https://orcid.org/0000-0002-1747-0469"
    },
    {
      "@type": "Person",
      "givenName": "Daniel",
      "familyName": "Possenriede",
      "email": "possenriede+r@gmail.com",
      "@id": "https://orcid.org/0000-0002-6738-9845"
    },
    {
      "@type": "Person",
      "givenName": "Michal",
      "familyName": "Lauer",
      "email": "michal.lauer.25@gmail.com"
    },
    {
      "@type": "Person",
      "givenName": "Anatoly",
      "familyName": "Tsyplenkov",
      "email": "atsyplenkov@gmail.com",
      "@id": "https://orcid.org/0000-0003-4144-8402"
    },
    {
      "@type": "Person",
      "givenName": "Chitra M.",
      "familyName": "Saraswati",
      "email": "chitra.m.saraswati@gmail.com",
      "@id": "https://orcid.org/0000-0002-8159-0414"
    }
  ],
  "maintainer": [
    {
      "@type": "Person",
      "givenName": "Nathan",
      "familyName": "Constantine-Cooke",
      "email": "nathan.constantine-cooke@ed.ac.uk",
      "@id": "https://orcid.org/0000-0002-4437-8713"
    }
  ],
  "softwareSuggestions": [
    {
      "@type": "SoftwareApplication",
      "identifier": "DT",
      "name": "DT",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=DT"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "future",
      "name": "future",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=future"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "future.apply",
      "name": "future.apply",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=future.apply"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "htmltools",
      "name": "htmltools",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=htmltools"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "knitr",
      "name": "knitr",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=knitr"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "parsedate",
      "name": "parsedate",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=parsedate"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "pkgbuild",
      "name": "pkgbuild",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=pkgbuild"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "png",
      "name": "png",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=png"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "readr",
      "name": "readr",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=readr"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "readxl",
      "name": "readxl",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=readxl"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "rmarkdown",
      "name": "rmarkdown",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=rmarkdown"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "shiny",
      "name": "shiny",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=shiny"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "shinytest2",
      "name": "shinytest2",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=shinytest2"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "spelling",
      "name": "spelling",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=spelling"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "testthat",
      "name": "testthat",
      "version": ">= 3.0.0",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=testthat"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "withr",
      "name": "withr",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=withr"
    }
  ],
  "softwareRequirements": {
    "1": {
      "@type": "SoftwareApplication",
      "identifier": "R",
      "name": "R",
      "version": ">= 4.2"
    },
    "2": {
      "@type": "SoftwareApplication",
      "identifier": "lifecycle",
      "name": "lifecycle",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=lifecycle"
    },
    "3": {
      "@type": "SoftwareApplication",
      "identifier": "rlang",
      "name": "rlang",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=rlang"
    },
    "SystemRequirements": "Cargo (Rust's package manager), rustc"
  },
  "fileSize": "8143.04KB",
  "citation": [
    {
      "@type": "SoftwareSourceCode",
      "datePublished": "2025",
      "author": [
        {
          "@type": "Person",
          "givenName": "Nathan",
          "familyName": "Constantine-Cooke"
        }
      ],
      "name": "{datefixR}: Standardize Dates in Different Formats or with Missing Data",
      "identifier": "10.5281/zenodo.5655311",
      "url": "https://CRAN.R-project.org/package=datefixR",
      "description": "R package version 2.0.0",
      "@id": "https://doi.org/10.5281/zenodo.5655311",
      "sameAs": "https://doi.org/10.5281/zenodo.5655311"
    }
  ]
}

GitHub Events

Total
  • Create event: 5
  • Release event: 1
  • Issues event: 3
  • Delete event: 1
  • Issue comment event: 3
  • Push event: 64
  • Pull request event: 35
Last Year
  • Create event: 5
  • Release event: 1
  • Issues event: 3
  • Delete event: 1
  • Issue comment event: 3
  • Push event: 64
  • Pull request event: 35

Committers

Last synced: 7 months ago

All Time
  • Total Commits: 429
  • Total Committers: 13
  • Avg Commits per committer: 33.0
  • Development Distribution Score (DDS): 0.24
Past Year
  • Commits: 30
  • Committers: 4
  • Avg Commits per committer: 7.5
  • Development Distribution Score (DDS): 0.4
Top Committers
Name Email Commits
Nathan Constantine-Cooke n****e@e****k 326
github-actions[bot] g****] 73
Daniel Possenriede p****e@g****m 8
dependabot[bot] 4****] 5
Michal Lauer m****5@g****m 4
Anatolii Tsyplenkov a****v@g****m 3
chitrams 1****s 2
Jonathan Kitt j****t@p****m 2
Antonio J Perez-Luque a****u@g****m 2
mt-gitlocalize mt@g****m 1
gitlocalize-app[bot] 5****] 1
Jonathan Guallasamín 7****n 1
Anatolii Tsyplenkov t****a@l****z 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 47
  • Total pull requests: 87
  • Average time to close issues: 2 months
  • Average time to close pull requests: 2 days
  • Total issue authors: 8
  • Total pull request authors: 10
  • Average comments per issue: 1.38
  • Average comments per pull request: 0.49
  • Merged pull requests: 72
  • Bot issues: 0
  • Bot pull requests: 39
Past Year
  • Issues: 2
  • Pull requests: 26
  • Average time to close issues: 9 days
  • Average time to close pull requests: 1 day
  • Issue authors: 2
  • Pull request authors: 4
  • Average comments per issue: 1.5
  • Average comments per pull request: 0.08
  • Merged pull requests: 14
  • Bot issues: 0
  • Bot pull requests: 23
Top Authors
Issue Authors
  • nathansam (33)
  • adamhsparks (4)
  • dpprdan (3)
  • alstat (2)
  • robin-hutchinson (2)
  • eddelbuettel (1)
  • atsyplenkov (1)
  • KittJonathan (1)
Pull Request Authors
  • nathansam (37)
  • github-actions[bot] (30)
  • gitlocalize-app[bot] (9)
  • dependabot[bot] (7)
  • dpprdan (5)
  • chitrams (2)
  • atsyplenkov (1)
  • KittJonathan (1)
  • Guallasamin (1)
  • ajpelu (1)
Top Labels
Issue Labels
enhancement (5) help wanted (3) good first issue (1) documentation (1) bug (1)
Pull Request Labels
dependencies (7)

Packages

  • Total packages: 1
  • Total downloads:
    • cran 549 last-month
  • Total dependent packages: 0
  • Total dependent repositories: 1
  • Total versions: 17
  • Total maintainers: 1
cran.r-project.org: datefixR

Standardize Dates in Different Formats or with Missing Data

  • Versions: 17
  • Dependent Packages: 0
  • Dependent Repositories: 1
  • Downloads: 549 Last month
Rankings
Stargazers count: 9.0%
Forks count: 12.2%
Average: 19.2%
Downloads: 22.4%
Dependent repos count: 23.8%
Dependent packages count: 28.7%
Last synced: 6 months ago

Dependencies

DESCRIPTION cran
  • R >= 4.0.0 depends
  • stringr * imports
  • knitr * suggests
  • rmarkdown * suggests
  • spelling * suggests
  • testthat >= 3.0.0 suggests
.github/workflows/R-CMD-check.yaml actions
  • actions/checkout v3 composite
  • actions/upload-artifact v3 composite
  • r-lib/actions/setup-pandoc v2 composite
  • r-lib/actions/setup-r v2 composite
  • r-lib/actions/setup-r-dependencies v2 composite
.github/workflows/deploy-shiny.yaml actions
  • actions/checkout v3 composite
  • r-lib/actions/setup-r v2 composite
.github/workflows/hello-to-new-contributions.yml actions
  • actions/first-interaction v1 composite
.github/workflows/pr-commands.yaml actions
  • actions/checkout v3 composite
  • r-lib/actions/pr-fetch v2 composite
  • r-lib/actions/pr-push v2 composite
  • r-lib/actions/setup-r v2 composite
  • r-lib/actions/setup-r-dependencies v2 composite
.github/workflows/update-citation-cff.yaml actions
  • actions/checkout v3 composite
  • r-lib/actions/setup-r v2 composite
  • r-lib/actions/setup-r-dependencies v2 composite