mirror of
https://github.com/agdamsbo/REDCapCAST.git
synced 2024-11-25 14:21:54 +01:00
Compare commits
No commits in common. "5979b972e11e45ef2377f66ce7598d8324e99bc8" and "c47f5a9d0781522303461953bcf44d009d5d05dc" have entirely different histories.
5979b972e1
...
c47f5a9d07
4
NEWS.md
4
NEWS.md
@ -6,13 +6,11 @@
|
|||||||
|
|
||||||
* Fix: `easy_redcap()`: fixed to actually allow project naming. also specifically asks for uri.
|
* 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: `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: `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
|
### Other
|
||||||
|
|
||||||
|
29
R/ds2ical.R
29
R/ds2ical.R
@ -3,9 +3,10 @@ utils::globalVariables(c("DTSTART"))
|
|||||||
#' Convert data set to ical file
|
#' Convert data set to ical file
|
||||||
#'
|
#'
|
||||||
#' @param data data set
|
#' @param data data set
|
||||||
#' @param start dplyr style event start datetime column name
|
#' @param start event start column
|
||||||
#' @param end dplyr style event end datetime column name
|
#' @param location event location column
|
||||||
#' @param location dplyr style event location column name
|
#' @param event.length use lubridate functions to generate "Period" class
|
||||||
|
#' element (default is lubridate::hours(2))
|
||||||
#' @param summary.glue.string character string to pass to glue::glue() for event
|
#' @param summary.glue.string character string to pass to glue::glue() for event
|
||||||
#' name (summary). Can take any column from data set.
|
#' name (summary). Can take any column from data set.
|
||||||
#' @param description.glue.string character string to pass to glue::glue() for
|
#' @param description.glue.string character string to pass to glue::glue() for
|
||||||
@ -16,24 +17,24 @@ utils::globalVariables(c("DTSTART"))
|
|||||||
#'
|
#'
|
||||||
#' @examples
|
#' @examples
|
||||||
#' df <- dplyr::tibble(start = c(Sys.time(), Sys.time() + lubridate::days(2)),
|
#' df <- dplyr::tibble(start = c(Sys.time(), Sys.time() + lubridate::days(2)),
|
||||||
#' id = c("1", 3), assessor = "A", location = "111", note = c(NA, "OBS")) |>
|
#' id = c("1", 3), assessor = "A", location = "111", note = c(NA, "OBS"))
|
||||||
#' dplyr::mutate(end= start+lubridate::hours(2))
|
#' df |> ds2ical(start, location)
|
||||||
#' df |> ds2ical()
|
#' df |> ds2ical(start, location,
|
||||||
#' df |> ds2ical(summary.glue.string = "ID {id} [{assessor}] {note}")
|
#' summary.glue.string = "ID {id} [{assessor}] {note}")
|
||||||
#' # Export .ics file: (not run)
|
#' # Export .ics file: (not run)
|
||||||
#' ical <- df |> ds2ical(start, end, location, description.glue.string = "{note}")
|
#' ical <- df |> ds2ical(start, location, description.glue.string = "{note}")
|
||||||
#' # ical |> calendar::ic_write(file=here::here("calendar.ics"))
|
#' # ical |> calendar::ic_write(file=here::here("calendar.ics"))
|
||||||
ds2ical <- function(data,
|
ds2ical <- function(data,
|
||||||
start=start,
|
start,
|
||||||
end=end,
|
location,
|
||||||
location=location,
|
|
||||||
summary.glue.string = "ID {id} [{assessor}]",
|
summary.glue.string = "ID {id} [{assessor}]",
|
||||||
description.glue.string = NULL) {
|
description.glue.string = NULL,
|
||||||
|
event.length = lubridate::hours(2)) {
|
||||||
ds <- data |>
|
ds <- data |>
|
||||||
dplyr::transmute(
|
dplyr::transmute(
|
||||||
SUMMARY = glue::glue(summary.glue.string, .na = ""),
|
SUMMARY = glue::glue(summary.glue.string, .na = ""),
|
||||||
DTSTART = lubridate::ymd_hms({{ start }}),
|
DTSTART = lubridate::ymd_hms({{ start }}, tz = "CET"),
|
||||||
DTEND = lubridate::ymd_hms({{ end }}),
|
DTEND = DTSTART + event.length,
|
||||||
LOCATION = {{ location }}
|
LOCATION = {{ location }}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -33,6 +33,7 @@ read_redcap_tables <- function(uri,
|
|||||||
raw_or_label = "label",
|
raw_or_label = "label",
|
||||||
split_forms = "all",
|
split_forms = "all",
|
||||||
generics = c(
|
generics = c(
|
||||||
|
"record_id",
|
||||||
"redcap_event_name",
|
"redcap_event_name",
|
||||||
"redcap_repeat_instrument",
|
"redcap_repeat_instrument",
|
||||||
"redcap_repeat_instance"
|
"redcap_repeat_instance"
|
||||||
@ -99,9 +100,6 @@ read_redcap_tables <- function(uri,
|
|||||||
m <- focused_metadata(m,names(d))
|
m <- focused_metadata(m,names(d))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (any(generics %in% names(d))){
|
|
||||||
# Splitting
|
# Splitting
|
||||||
l <- REDCap_split(d,
|
l <- REDCap_split(d,
|
||||||
m,
|
m,
|
||||||
@ -110,13 +108,7 @@ read_redcap_tables <- function(uri,
|
|||||||
|
|
||||||
# Sanitizing split list by removing completely empty rows apart from colnames
|
# Sanitizing split list by removing completely empty rows apart from colnames
|
||||||
# in "generics"
|
# in "generics"
|
||||||
sanitize_split(l,c(names(d)[1],generics))
|
sanitize_split(l,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,8 +33,6 @@ dta
|
|||||||
et
|
et
|
||||||
gues
|
gues
|
||||||
hms
|
hms
|
||||||
ical
|
|
||||||
ics
|
|
||||||
immprovements
|
immprovements
|
||||||
jbi
|
jbi
|
||||||
keyring
|
keyring
|
||||||
|
@ -6,27 +6,28 @@
|
|||||||
\usage{
|
\usage{
|
||||||
ds2ical(
|
ds2ical(
|
||||||
data,
|
data,
|
||||||
start = start,
|
start,
|
||||||
end = end,
|
location,
|
||||||
location = location,
|
|
||||||
summary.glue.string = "ID {id} [{assessor}]",
|
summary.glue.string = "ID {id} [{assessor}]",
|
||||||
description.glue.string = NULL
|
description.glue.string = NULL,
|
||||||
|
event.length = lubridate::hours(2)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
\arguments{
|
\arguments{
|
||||||
\item{data}{data set}
|
\item{data}{data set}
|
||||||
|
|
||||||
\item{start}{dplyr style event start datetime column name}
|
\item{start}{event start column}
|
||||||
|
|
||||||
\item{end}{dplyr style event end datetime column name}
|
\item{location}{event location column}
|
||||||
|
|
||||||
\item{location}{dplyr style event location column name}
|
|
||||||
|
|
||||||
\item{summary.glue.string}{character string to pass to glue::glue() for event
|
\item{summary.glue.string}{character string to pass to glue::glue() for event
|
||||||
name (summary). Can take any column from data set.}
|
name (summary). Can take any column from data set.}
|
||||||
|
|
||||||
\item{description.glue.string}{character string to pass to glue::glue() for
|
\item{description.glue.string}{character string to pass to glue::glue() for
|
||||||
event description. Can take any column from data set.}
|
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{
|
\value{
|
||||||
tibble of class "ical"
|
tibble of class "ical"
|
||||||
@ -36,11 +37,11 @@ Convert data set to ical file
|
|||||||
}
|
}
|
||||||
\examples{
|
\examples{
|
||||||
df <- dplyr::tibble(start = c(Sys.time(), Sys.time() + lubridate::days(2)),
|
df <- dplyr::tibble(start = c(Sys.time(), Sys.time() + lubridate::days(2)),
|
||||||
id = c("1", 3), assessor = "A", location = "111", note = c(NA, "OBS")) |>
|
id = c("1", 3), assessor = "A", location = "111", note = c(NA, "OBS"))
|
||||||
dplyr::mutate(end= start+lubridate::hours(2))
|
df |> ds2ical(start, location)
|
||||||
df |> ds2ical()
|
df |> ds2ical(start, location,
|
||||||
df |> ds2ical(summary.glue.string = "ID {id} [{assessor}] {note}")
|
summary.glue.string = "ID {id} [{assessor}] {note}")
|
||||||
# Export .ics file: (not run)
|
# Export .ics file: (not run)
|
||||||
ical <- df |> ds2ical(start, end, location, description.glue.string = "{note}")
|
ical <- df |> ds2ical(start, location, description.glue.string = "{note}")
|
||||||
# ical |> calendar::ic_write(file=here::here("calendar.ics"))
|
# ical |> calendar::ic_write(file=here::here("calendar.ics"))
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,8 @@ read_redcap_tables(
|
|||||||
forms = NULL,
|
forms = NULL,
|
||||||
raw_or_label = "label",
|
raw_or_label = "label",
|
||||||
split_forms = "all",
|
split_forms = "all",
|
||||||
generics = c("redcap_event_name", "redcap_repeat_instrument", "redcap_repeat_instance")
|
generics = c("record_id", "redcap_event_name", "redcap_repeat_instrument",
|
||||||
|
"redcap_repeat_instance")
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
\arguments{
|
\arguments{
|
||||||
|
Loading…
Reference in New Issue
Block a user