mirror of
https://github.com/agdamsbo/REDCapCAST.git
synced 2024-11-22 05:20:23 +01:00
Compare commits
3 Commits
c47f5a9d07
...
5979b972e1
Author | SHA1 | Date | |
---|---|---|---|
5979b972e1 | |||
6c18ed5a01 | |||
82400b2ab9 |
4
NEWS.md
4
NEWS.md
@ -6,11 +6,13 @@
|
||||
|
||||
* Fix: `easy_redcap()`: fixed to actually allow project naming. also specifically asks for uri.
|
||||
|
||||
* Fix: `read_redcap_tables()`: now handles non-longitudinal project without repeatable instruments.
|
||||
|
||||
* NEW: `ds2dd_detailed()`: extension of the `ds2dd()`, which serves to preserve as much metadata as possible automatically. Depends on a group of helper functions also introduced. Of special note is the `guess_time_only_filter()`, which will try to guess which columns/variables should be formatted as time only formats. Supports hms time format. DETAILED INSTRUCTION AND VIGNETTE IS PENDING.
|
||||
|
||||
* NEW: `read_redcap_instrument()` convenience function to retrieve complete instrument. Goes a little against the focused approach. DETAILED INSTRUCTION IS PENDING.
|
||||
|
||||
* NEW: `ds2ical()` converts data set to ical format with easy glue string for summary and description. Export ics file with `calendar::ic_write()`.
|
||||
* NEW: `ds2ical()` converts data set to ical format with easy glue string for summary and description. Export .ics file with `calendar::ic_write()`.
|
||||
|
||||
### Other
|
||||
|
||||
|
29
R/ds2ical.R
29
R/ds2ical.R
@ -3,10 +3,9 @@ utils::globalVariables(c("DTSTART"))
|
||||
#' Convert data set to ical file
|
||||
#'
|
||||
#' @param data data set
|
||||
#' @param start event start column
|
||||
#' @param location event location column
|
||||
#' @param event.length use lubridate functions to generate "Period" class
|
||||
#' element (default is lubridate::hours(2))
|
||||
#' @param start dplyr style event start datetime column name
|
||||
#' @param end dplyr style event end datetime column name
|
||||
#' @param location dplyr style event location column name
|
||||
#' @param summary.glue.string character string to pass to glue::glue() for event
|
||||
#' name (summary). Can take any column from data set.
|
||||
#' @param description.glue.string character string to pass to glue::glue() for
|
||||
@ -17,24 +16,24 @@ utils::globalVariables(c("DTSTART"))
|
||||
#'
|
||||
#' @examples
|
||||
#' df <- dplyr::tibble(start = c(Sys.time(), Sys.time() + lubridate::days(2)),
|
||||
#' id = c("1", 3), assessor = "A", location = "111", note = c(NA, "OBS"))
|
||||
#' df |> ds2ical(start, location)
|
||||
#' df |> ds2ical(start, location,
|
||||
#' summary.glue.string = "ID {id} [{assessor}] {note}")
|
||||
#' id = c("1", 3), assessor = "A", location = "111", note = c(NA, "OBS")) |>
|
||||
#' dplyr::mutate(end= start+lubridate::hours(2))
|
||||
#' df |> ds2ical()
|
||||
#' df |> ds2ical(summary.glue.string = "ID {id} [{assessor}] {note}")
|
||||
#' # Export .ics file: (not run)
|
||||
#' ical <- df |> ds2ical(start, location, description.glue.string = "{note}")
|
||||
#' ical <- df |> ds2ical(start, end, location, description.glue.string = "{note}")
|
||||
#' # ical |> calendar::ic_write(file=here::here("calendar.ics"))
|
||||
ds2ical <- function(data,
|
||||
start,
|
||||
location,
|
||||
start=start,
|
||||
end=end,
|
||||
location=location,
|
||||
summary.glue.string = "ID {id} [{assessor}]",
|
||||
description.glue.string = NULL,
|
||||
event.length = lubridate::hours(2)) {
|
||||
description.glue.string = NULL) {
|
||||
ds <- data |>
|
||||
dplyr::transmute(
|
||||
SUMMARY = glue::glue(summary.glue.string, .na = ""),
|
||||
DTSTART = lubridate::ymd_hms({{ start }}, tz = "CET"),
|
||||
DTEND = DTSTART + event.length,
|
||||
DTSTART = lubridate::ymd_hms({{ start }}),
|
||||
DTEND = lubridate::ymd_hms({{ end }}),
|
||||
LOCATION = {{ location }}
|
||||
)
|
||||
|
||||
|
@ -33,7 +33,6 @@ read_redcap_tables <- function(uri,
|
||||
raw_or_label = "label",
|
||||
split_forms = "all",
|
||||
generics = c(
|
||||
"record_id",
|
||||
"redcap_event_name",
|
||||
"redcap_repeat_instrument",
|
||||
"redcap_repeat_instance"
|
||||
@ -100,6 +99,9 @@ read_redcap_tables <- function(uri,
|
||||
m <- focused_metadata(m,names(d))
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (any(generics %in% names(d))){
|
||||
# Splitting
|
||||
l <- REDCap_split(d,
|
||||
m,
|
||||
@ -108,7 +110,13 @@ read_redcap_tables <- function(uri,
|
||||
|
||||
# Sanitizing split list by removing completely empty rows apart from colnames
|
||||
# in "generics"
|
||||
sanitize_split(l,generics)
|
||||
sanitize_split(l,c(names(d)[1],generics))
|
||||
} else {
|
||||
# If none of generics are present, the data base is not longitudinal,
|
||||
# and does not have repeatable events, and therefore splitting does not
|
||||
# make sense. But now we handle that as well.
|
||||
d
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -33,6 +33,8 @@ dta
|
||||
et
|
||||
gues
|
||||
hms
|
||||
ical
|
||||
ics
|
||||
immprovements
|
||||
jbi
|
||||
keyring
|
||||
|
@ -6,28 +6,27 @@
|
||||
\usage{
|
||||
ds2ical(
|
||||
data,
|
||||
start,
|
||||
location,
|
||||
start = start,
|
||||
end = end,
|
||||
location = location,
|
||||
summary.glue.string = "ID {id} [{assessor}]",
|
||||
description.glue.string = NULL,
|
||||
event.length = lubridate::hours(2)
|
||||
description.glue.string = NULL
|
||||
)
|
||||
}
|
||||
\arguments{
|
||||
\item{data}{data set}
|
||||
|
||||
\item{start}{event start column}
|
||||
\item{start}{dplyr style event start datetime column name}
|
||||
|
||||
\item{location}{event location column}
|
||||
\item{end}{dplyr style event end datetime column name}
|
||||
|
||||
\item{location}{dplyr style event location column name}
|
||||
|
||||
\item{summary.glue.string}{character string to pass to glue::glue() for event
|
||||
name (summary). Can take any column from data set.}
|
||||
|
||||
\item{description.glue.string}{character string to pass to glue::glue() for
|
||||
event description. Can take any column from data set.}
|
||||
|
||||
\item{event.length}{use lubridate functions to generate "Period" class
|
||||
element (default is lubridate::hours(2))}
|
||||
}
|
||||
\value{
|
||||
tibble of class "ical"
|
||||
@ -37,11 +36,11 @@ Convert data set to ical file
|
||||
}
|
||||
\examples{
|
||||
df <- dplyr::tibble(start = c(Sys.time(), Sys.time() + lubridate::days(2)),
|
||||
id = c("1", 3), assessor = "A", location = "111", note = c(NA, "OBS"))
|
||||
df |> ds2ical(start, location)
|
||||
df |> ds2ical(start, location,
|
||||
summary.glue.string = "ID {id} [{assessor}] {note}")
|
||||
id = c("1", 3), assessor = "A", location = "111", note = c(NA, "OBS")) |>
|
||||
dplyr::mutate(end= start+lubridate::hours(2))
|
||||
df |> ds2ical()
|
||||
df |> ds2ical(summary.glue.string = "ID {id} [{assessor}] {note}")
|
||||
# Export .ics file: (not run)
|
||||
ical <- df |> ds2ical(start, location, description.glue.string = "{note}")
|
||||
ical <- df |> ds2ical(start, end, location, description.glue.string = "{note}")
|
||||
# ical |> calendar::ic_write(file=here::here("calendar.ics"))
|
||||
}
|
||||
|
@ -13,8 +13,7 @@ read_redcap_tables(
|
||||
forms = NULL,
|
||||
raw_or_label = "label",
|
||||
split_forms = "all",
|
||||
generics = c("record_id", "redcap_event_name", "redcap_repeat_instrument",
|
||||
"redcap_repeat_instance")
|
||||
generics = c("redcap_event_name", "redcap_repeat_instrument", "redcap_repeat_instance")
|
||||
)
|
||||
}
|
||||
\arguments{
|
||||
|
Loading…
Reference in New Issue
Block a user