mirror of
https://github.com/agdamsbo/REDCapCAST.git
synced 2024-11-22 13:30:23 +01:00
major update with new functions and renv is out! see NEWS section
This commit is contained in:
parent
b35142f0cc
commit
4a56f4ec45
@ -6,7 +6,7 @@ options(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
source("renv/activate.R")
|
# source("renv/activate.R")
|
||||||
|
|
||||||
if (interactive()) {
|
if (interactive()) {
|
||||||
suppressMessages(require(usethis))
|
suppressMessages(require(usethis))
|
||||||
|
2
.github/workflows/R-CMD-check.yaml
vendored
2
.github/workflows/R-CMD-check.yaml
vendored
@ -39,7 +39,7 @@ jobs:
|
|||||||
http-user-agent: ${{ matrix.config.http-user-agent }}
|
http-user-agent: ${{ matrix.config.http-user-agent }}
|
||||||
use-public-rspm: true
|
use-public-rspm: true
|
||||||
|
|
||||||
- uses: r-lib/actions/setup-renv@v2
|
# - uses: r-lib/actions/setup-renv@v2
|
||||||
|
|
||||||
- uses: r-lib/actions/setup-r-dependencies@v2
|
- uses: r-lib/actions/setup-r-dependencies@v2
|
||||||
with:
|
with:
|
||||||
|
2
.github/workflows/pkgdown.yaml
vendored
2
.github/workflows/pkgdown.yaml
vendored
@ -30,7 +30,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
use-public-rspm: true
|
use-public-rspm: true
|
||||||
|
|
||||||
- uses: r-lib/actions/setup-renv@v2
|
# - uses: r-lib/actions/setup-renv@v2
|
||||||
|
|
||||||
- uses: r-lib/actions/setup-r-dependencies@v2
|
- uses: r-lib/actions/setup-r-dependencies@v2
|
||||||
with:
|
with:
|
||||||
|
2
.github/workflows/test-coverage.yaml
vendored
2
.github/workflows/test-coverage.yaml
vendored
@ -21,7 +21,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
use-public-rspm: true
|
use-public-rspm: true
|
||||||
|
|
||||||
- uses: r-lib/actions/setup-renv@v2
|
# - uses: r-lib/actions/setup-renv@v2
|
||||||
|
|
||||||
- uses: r-lib/actions/setup-r-dependencies@v2
|
- uses: r-lib/actions/setup-r-dependencies@v2
|
||||||
with:
|
with:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
Package: REDCapCAST
|
Package: REDCapCAST
|
||||||
Title: REDCap Castellated Data Handling
|
Title: REDCap Castellated Data Handling
|
||||||
Version: 24.5.1
|
Version: 24.6.1
|
||||||
Authors@R: c(
|
Authors@R: c(
|
||||||
person("Andreas Gammelgaard", "Damsbo", email = "agdamsbo@clin.au.dk",
|
person("Andreas Gammelgaard", "Damsbo", email = "agdamsbo@clin.au.dk",
|
||||||
role = c("aut", "cre"),comment = c(ORCID = "0000-0002-7559-1154")),
|
role = c("aut", "cre"),comment = c(ORCID = "0000-0002-7559-1154")),
|
||||||
|
2
NEWS.md
2
NEWS.md
@ -1,4 +1,4 @@
|
|||||||
# REDCapCAST 24.5.1
|
# REDCapCAST 24.6.1
|
||||||
|
|
||||||
### Functions
|
### Functions
|
||||||
|
|
||||||
|
25
R/doc2dd.R
25
R/doc2dd.R
@ -108,6 +108,9 @@ doc2dd <- function(data,
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Defining the calculations
|
## Defining the calculations
|
||||||
if (is_missing(col.calculation)) {
|
if (is_missing(col.calculation)) {
|
||||||
out <- out |>
|
out <- out |>
|
||||||
@ -115,12 +118,13 @@ doc2dd <- function(data,
|
|||||||
calculations = missing.default
|
calculations = missing.default
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
|
# With inspiration from textclean package, curly apostrophe is replaced
|
||||||
out <- out |>
|
out <- out |>
|
||||||
dplyr::mutate(
|
dplyr::mutate(
|
||||||
calculations = dplyr::pick(col.calculation) |>
|
calculations = dplyr::pick(col.calculation) |>
|
||||||
unlist() |>
|
unlist() |>
|
||||||
tolower() |>
|
tolower() |>
|
||||||
(\(.x) gsub("’", "'", .x))()
|
replace_curly_quote()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -288,3 +292,22 @@ is_missing <- function(data,nas=c("", "NA")) {
|
|||||||
is.na(data) | data %in% nas
|
is.na(data) | data %in% nas
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#' Replace curly apostrophes and quotes from word
|
||||||
|
#'
|
||||||
|
#' @description
|
||||||
|
#' Copied from textclean, which has not been updated since 2018 and is not
|
||||||
|
#' on CRAN. Github:https://github.com/trinker/textclean
|
||||||
|
#'
|
||||||
|
#' @param x character vector
|
||||||
|
#'
|
||||||
|
#' @return character vector
|
||||||
|
replace_curly_quote <- function(x){
|
||||||
|
replaces <- c('\x91', '\x92', '\x93', '\x94')
|
||||||
|
Encoding(replaces) <- "latin1"
|
||||||
|
for (i in 1:4) {
|
||||||
|
x <- gsub(replaces[i], c("'", "'", "\"", "\"")[i], x, fixed = TRUE)
|
||||||
|
}
|
||||||
|
x
|
||||||
|
}
|
||||||
|
@ -343,10 +343,10 @@ ds2dd_detailed <- function(data,
|
|||||||
lapply(function(x) {
|
lapply(function(x) {
|
||||||
if (is.factor(x)) {
|
if (is.factor(x)) {
|
||||||
## Re-factors to avoid confusion with missing levels
|
## Re-factors to avoid confusion with missing levels
|
||||||
## Assumes alle relevant levels are represented in the data
|
## Assumes all relevant levels are represented in the data
|
||||||
re_fac <- factor(x)
|
re_fac <- factor(x)
|
||||||
paste(
|
paste(
|
||||||
paste(unique(as.numeric(re_fac)),
|
paste(seq_along(levels(re_fac)),
|
||||||
levels(re_fac),
|
levels(re_fac),
|
||||||
sep = ", "
|
sep = ", "
|
||||||
),
|
),
|
||||||
|
@ -5,6 +5,6 @@ account: agdamsbo
|
|||||||
server: shinyapps.io
|
server: shinyapps.io
|
||||||
hostUrl: https://api.shinyapps.io/v1
|
hostUrl: https://api.shinyapps.io/v1
|
||||||
appId: 11351429
|
appId: 11351429
|
||||||
bundleId:
|
bundleId: 8567755
|
||||||
url: https://agdamsbo.shinyapps.io/redcapcast/
|
url: https://agdamsbo.shinyapps.io/redcapcast/
|
||||||
version: 1
|
version: 1
|
||||||
|
28
app/ui.R
28
app/ui.R
@ -1,6 +1,6 @@
|
|||||||
ui <- shiny::shinyUI(
|
ui <- shiny::shinyUI(
|
||||||
shiny::fluidPage(
|
shiny::fluidPage(
|
||||||
theme = shinythemes::shinytheme("united"),
|
theme = shinythemes::shinytheme("flatly"),
|
||||||
|
|
||||||
## -----------------------------------------------------------------------------
|
## -----------------------------------------------------------------------------
|
||||||
## Application title
|
## Application title
|
||||||
@ -11,15 +11,20 @@ ui <- shiny::shinyUI(
|
|||||||
# windowTitle = "REDCap database creator"
|
# windowTitle = "REDCap database creator"
|
||||||
# ),
|
# ),
|
||||||
|
|
||||||
shiny::titlePanel(title = shiny::div(shiny::a(shiny::img(src="logo.png"),href="https://agdamsbo.github.io/REDCapCAST"),
|
shiny::titlePanel(
|
||||||
"Easy REDCap database creation"),
|
title = shiny::div(
|
||||||
|
shiny::a(shiny::img(src = "logo.png"), href = "https://agdamsbo.github.io/REDCapCAST"),
|
||||||
|
"Easy REDCap database creation"
|
||||||
|
),
|
||||||
windowTitle = "REDCap database creator"
|
windowTitle = "REDCap database creator"
|
||||||
),
|
),
|
||||||
shiny::h4("This tool includes to convenient functions:",
|
shiny::h4(
|
||||||
|
"This tool includes to convenient functions:",
|
||||||
shiny::br(),
|
shiny::br(),
|
||||||
"1) creating a REDCap data dictionary based on a spreadsheet (.csv/.xls(x)/.dta) and",
|
"1) creating a REDCap data dictionary based on a spreadsheet (.csv/.xls(x)/.dta) and",
|
||||||
shiny::br(),
|
shiny::br(),
|
||||||
"2) creating said database on a given REDCap server and uploading the dataset via API access."),
|
"2) creating said database on a given REDCap server and uploading the dataset via API access."
|
||||||
|
),
|
||||||
|
|
||||||
|
|
||||||
## -----------------------------------------------------------------------------
|
## -----------------------------------------------------------------------------
|
||||||
@ -60,7 +65,7 @@ ui <- shiny::shinyUI(
|
|||||||
label = "API key",
|
label = "API key",
|
||||||
value = ""
|
value = ""
|
||||||
),
|
),
|
||||||
shiny::h6("An API key is an access key to the REDCap database. Please", shiny::a("see here for directions", href="https://www.iths.org/news/redcap-tip/redcap-api-101/"), " to obtain an API key for your project."),
|
shiny::h6("An API key is an access key to the REDCap database. Please", shiny::a("see here for directions", href = "https://www.iths.org/news/redcap-tip/redcap-api-101/"), " to obtain an API key for your project."),
|
||||||
shiny::actionButton(
|
shiny::actionButton(
|
||||||
inputId = "upload.meta",
|
inputId = "upload.meta",
|
||||||
label = "Upload datadictionary", icon = shiny::icon("book-bookmark")
|
label = "Upload datadictionary", icon = shiny::icon("book-bookmark")
|
||||||
@ -112,13 +117,13 @@ ui <- shiny::shinyUI(
|
|||||||
shiny::tags$footer(shiny::strong("Disclaimer: "),
|
shiny::tags$footer(shiny::strong("Disclaimer: "),
|
||||||
"This tool is aimed at demonstrating use of REDCapCAST. No responsibility for data loss or any other problems will be taken. Please contact me for support.",
|
"This tool is aimed at demonstrating use of REDCapCAST. No responsibility for data loss or any other problems will be taken. Please contact me for support.",
|
||||||
shiny::br(),
|
shiny::br(),
|
||||||
shiny::a("License: GPL-3+",href="https://agdamsbo.github.io/REDCapCAST/LICENSE.html"),
|
shiny::a("License: GPL-3+", href = "https://agdamsbo.github.io/REDCapCAST/LICENSE.html"),
|
||||||
"|",
|
"|",
|
||||||
shiny::a("agdamsbo/REDCapCAST",href="https://agdamsbo.github.io/REDCapCAST"),
|
shiny::a("agdamsbo/REDCapCAST", href = "https://agdamsbo.github.io/REDCapCAST"),
|
||||||
"|",
|
"|",
|
||||||
shiny::a("Source",href="https://github.com/agdamsbo/REDCapCAST"),
|
shiny::a("Source", href = "https://github.com/agdamsbo/REDCapCAST"),
|
||||||
"|",
|
"|",
|
||||||
shiny::a("Contact",href="https://andreas.gdamsbo.dk"),
|
shiny::a("Contact", href = "https://andreas.gdamsbo.dk"),
|
||||||
align = "center",
|
align = "center",
|
||||||
style = "
|
style = "
|
||||||
position:fixed;
|
position:fixed;
|
||||||
@ -129,6 +134,7 @@ ui <- shiny::shinyUI(
|
|||||||
padding: 0px;
|
padding: 0px;
|
||||||
background-color: White;
|
background-color: White;
|
||||||
z-index: 100;
|
z-index: 100;
|
||||||
")
|
"
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -4,6 +4,7 @@ Codecov
|
|||||||
DOI
|
DOI
|
||||||
DataDictionary
|
DataDictionary
|
||||||
GStat
|
GStat
|
||||||
|
Github
|
||||||
GithubActions
|
GithubActions
|
||||||
JSON
|
JSON
|
||||||
Lifecycle
|
Lifecycle
|
||||||
@ -14,7 +15,6 @@ README
|
|||||||
REDCap
|
REDCap
|
||||||
REDCapR
|
REDCapR
|
||||||
REDCapRITS
|
REDCapRITS
|
||||||
THe
|
|
||||||
UI
|
UI
|
||||||
WD
|
WD
|
||||||
al
|
al
|
||||||
@ -34,8 +34,10 @@ dplyr
|
|||||||
ds
|
ds
|
||||||
dta
|
dta
|
||||||
et
|
et
|
||||||
|
github
|
||||||
gues
|
gues
|
||||||
hms
|
hms
|
||||||
|
https
|
||||||
immprovements
|
immprovements
|
||||||
io
|
io
|
||||||
jbi
|
jbi
|
||||||
@ -55,6 +57,7 @@ perl
|
|||||||
pos
|
pos
|
||||||
pre
|
pre
|
||||||
readr
|
readr
|
||||||
|
realising
|
||||||
sel
|
sel
|
||||||
sep
|
sep
|
||||||
seperator
|
seperator
|
||||||
@ -64,9 +67,11 @@ stRoke
|
|||||||
stata
|
stata
|
||||||
strsplit
|
strsplit
|
||||||
subheader
|
subheader
|
||||||
|
textclean
|
||||||
thorugh
|
thorugh
|
||||||
tibble
|
tibble
|
||||||
tidyverse
|
tidyverse
|
||||||
|
trinker
|
||||||
ui
|
ui
|
||||||
uri
|
uri
|
||||||
wil
|
wil
|
||||||
|
18
man/replace_curly_quote.Rd
Normal file
18
man/replace_curly_quote.Rd
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
% Generated by roxygen2: do not edit by hand
|
||||||
|
% Please edit documentation in R/doc2dd.R
|
||||||
|
\name{replace_curly_quote}
|
||||||
|
\alias{replace_curly_quote}
|
||||||
|
\title{Replace curly apostrophes and quotes from word}
|
||||||
|
\usage{
|
||||||
|
replace_curly_quote(x)
|
||||||
|
}
|
||||||
|
\arguments{
|
||||||
|
\item{x}{character vector}
|
||||||
|
}
|
||||||
|
\value{
|
||||||
|
character vector
|
||||||
|
}
|
||||||
|
\description{
|
||||||
|
Copied from textclean, which has not been updated since 2018 and is not
|
||||||
|
on CRAN. Github:https://github.com/trinker/textclean
|
||||||
|
}
|
52
renv.lock
52
renv.lock
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"R": {
|
"R": {
|
||||||
"Version": "4.3.3",
|
"Version": "4.4.0",
|
||||||
"Repositories": [
|
"Repositories": [
|
||||||
{
|
{
|
||||||
"Name": "CRAN",
|
"Name": "CRAN",
|
||||||
@ -138,14 +138,14 @@
|
|||||||
},
|
},
|
||||||
"cachem": {
|
"cachem": {
|
||||||
"Package": "cachem",
|
"Package": "cachem",
|
||||||
"Version": "1.0.8",
|
"Version": "1.1.0",
|
||||||
"Source": "Repository",
|
"Source": "Repository",
|
||||||
"Repository": "CRAN",
|
"Repository": "CRAN",
|
||||||
"Requirements": [
|
"Requirements": [
|
||||||
"fastmap",
|
"fastmap",
|
||||||
"rlang"
|
"rlang"
|
||||||
],
|
],
|
||||||
"Hash": "c35768291560ce302c0a6589f92e837d"
|
"Hash": "cd9a672193789068eb5a2aad65a0dedf"
|
||||||
},
|
},
|
||||||
"cellranger": {
|
"cellranger": {
|
||||||
"Package": "cellranger",
|
"Package": "cellranger",
|
||||||
@ -199,16 +199,6 @@
|
|||||||
"Repository": "CRAN",
|
"Repository": "CRAN",
|
||||||
"Hash": "5d8225445acb167abf7797de48b2ee3c"
|
"Hash": "5d8225445acb167abf7797de48b2ee3c"
|
||||||
},
|
},
|
||||||
"cpp11": {
|
|
||||||
"Package": "cpp11",
|
|
||||||
"Version": "0.4.7",
|
|
||||||
"Source": "Repository",
|
|
||||||
"Repository": "CRAN",
|
|
||||||
"Requirements": [
|
|
||||||
"R"
|
|
||||||
],
|
|
||||||
"Hash": "5a295d7d963cc5035284dcdbaf334f4e"
|
|
||||||
},
|
|
||||||
"crayon": {
|
"crayon": {
|
||||||
"Package": "crayon",
|
"Package": "crayon",
|
||||||
"Version": "1.5.2",
|
"Version": "1.5.2",
|
||||||
@ -279,10 +269,10 @@
|
|||||||
},
|
},
|
||||||
"fastmap": {
|
"fastmap": {
|
||||||
"Package": "fastmap",
|
"Package": "fastmap",
|
||||||
"Version": "1.1.1",
|
"Version": "1.2.0",
|
||||||
"Source": "Repository",
|
"Source": "Repository",
|
||||||
"Repository": "CRAN",
|
"Repository": "CRAN",
|
||||||
"Hash": "f7736a18de97dea803bde0a2daaafb27"
|
"Hash": "aa5e1cd11c2d15497494c5292d7ffcc8"
|
||||||
},
|
},
|
||||||
"filelock": {
|
"filelock": {
|
||||||
"Package": "filelock",
|
"Package": "filelock",
|
||||||
@ -533,13 +523,13 @@
|
|||||||
},
|
},
|
||||||
"openssl": {
|
"openssl": {
|
||||||
"Package": "openssl",
|
"Package": "openssl",
|
||||||
"Version": "2.1.2",
|
"Version": "2.2.0",
|
||||||
"Source": "Repository",
|
"Source": "Repository",
|
||||||
"Repository": "CRAN",
|
"Repository": "CRAN",
|
||||||
"Requirements": [
|
"Requirements": [
|
||||||
"askpass"
|
"askpass"
|
||||||
],
|
],
|
||||||
"Hash": "ea2475b073243d9d338aa8f086ce973e"
|
"Hash": "2bcca3848e4734eb3b16103bc9aa4b8e"
|
||||||
},
|
},
|
||||||
"openxlsx2": {
|
"openxlsx2": {
|
||||||
"Package": "openxlsx2",
|
"Package": "openxlsx2",
|
||||||
@ -585,30 +575,6 @@
|
|||||||
],
|
],
|
||||||
"Hash": "01f28d4278f15c76cddbea05899c5d6f"
|
"Hash": "01f28d4278f15c76cddbea05899c5d6f"
|
||||||
},
|
},
|
||||||
"prettyunits": {
|
|
||||||
"Package": "prettyunits",
|
|
||||||
"Version": "1.2.0",
|
|
||||||
"Source": "Repository",
|
|
||||||
"Repository": "CRAN",
|
|
||||||
"Requirements": [
|
|
||||||
"R"
|
|
||||||
],
|
|
||||||
"Hash": "6b01fc98b1e86c4f705ce9dcfd2f57c7"
|
|
||||||
},
|
|
||||||
"progress": {
|
|
||||||
"Package": "progress",
|
|
||||||
"Version": "1.2.3",
|
|
||||||
"Source": "Repository",
|
|
||||||
"Repository": "CRAN",
|
|
||||||
"Requirements": [
|
|
||||||
"R",
|
|
||||||
"R6",
|
|
||||||
"crayon",
|
|
||||||
"hms",
|
|
||||||
"prettyunits"
|
|
||||||
],
|
|
||||||
"Hash": "f4625e061cb2865f111b47ff163a5ca6"
|
|
||||||
},
|
|
||||||
"promises": {
|
"promises": {
|
||||||
"Package": "promises",
|
"Package": "promises",
|
||||||
"Version": "1.3.0",
|
"Version": "1.3.0",
|
||||||
@ -785,7 +751,7 @@
|
|||||||
},
|
},
|
||||||
"stringi": {
|
"stringi": {
|
||||||
"Package": "stringi",
|
"Package": "stringi",
|
||||||
"Version": "1.8.3",
|
"Version": "1.8.4",
|
||||||
"Source": "Repository",
|
"Source": "Repository",
|
||||||
"Repository": "CRAN",
|
"Repository": "CRAN",
|
||||||
"Requirements": [
|
"Requirements": [
|
||||||
@ -794,7 +760,7 @@
|
|||||||
"tools",
|
"tools",
|
||||||
"utils"
|
"utils"
|
||||||
],
|
],
|
||||||
"Hash": "058aebddea264f4c99401515182e656a"
|
"Hash": "39e1144fd75428983dc3f63aa53dfa91"
|
||||||
},
|
},
|
||||||
"stringr": {
|
"stringr": {
|
||||||
"Package": "stringr",
|
"Package": "stringr",
|
||||||
|
25
tests/spelling.Rout.save
Normal file
25
tests/spelling.Rout.save
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
|
||||||
|
R version 3.4.1 (2017-06-30) -- "Single Candle"
|
||||||
|
Copyright (C) 2017 The R Foundation for Statistical Computing
|
||||||
|
Platform: x86_64-apple-darwin15.6.0 (64-bit)
|
||||||
|
|
||||||
|
R is free software and comes with ABSOLUTELY NO WARRANTY.
|
||||||
|
You are welcome to redistribute it under certain conditions.
|
||||||
|
Type 'license()' or 'licence()' for distribution details.
|
||||||
|
|
||||||
|
R is a collaborative project with many contributors.
|
||||||
|
Type 'contributors()' for more information and
|
||||||
|
'citation()' on how to cite R or R packages in publications.
|
||||||
|
|
||||||
|
Type 'demo()' for some demos, 'help()' for on-line help, or
|
||||||
|
'help.start()' for an HTML browser interface to help.
|
||||||
|
Type 'q()' to quit R.
|
||||||
|
|
||||||
|
> if(requireNamespace('spelling', quietly = TRUE))
|
||||||
|
+ spelling::spell_check_test(vignettes = TRUE, error = FALSE,
|
||||||
|
+ skip_on_cran = TRUE)
|
||||||
|
All Done!
|
||||||
|
>
|
||||||
|
> proc.time()
|
||||||
|
user system elapsed
|
||||||
|
0.372 0.039 0.408
|
@ -18,33 +18,59 @@ knitr::opts_chunk$set(
|
|||||||
library(REDCapCAST)
|
library(REDCapCAST)
|
||||||
```
|
```
|
||||||
|
|
||||||
# Easy data set to data base workflow
|
# Two different ways to create a data base
|
||||||
|
|
||||||
THe first iteration of a dataset to data dictionary function is the `ds2dd()`, which creates a very basic data dictionary with all variables stored as text. This is sufficient for just storing old datasets/spreadsheets securely in REDCap.
|
`REDCapCAST` provides two approaches to creating a data dictionary aimed at helping out in two different cases:
|
||||||
|
|
||||||
```{r eval=FALSE}
|
1. Easily create a REDCap data base from an existing data set.
|
||||||
mtcars |>
|
|
||||||
|
2. Create a table in Word describing a variables in a data base and use this to create a data base.
|
||||||
|
|
||||||
|
In the following I will try to come with a few suggestions on how to use these approaches.
|
||||||
|
|
||||||
|
## Easy data set to data base workflow
|
||||||
|
|
||||||
|
The first iteration of a dataset to data dictionary function is the `ds2dd()`, which creates a very basic data dictionary with all variables stored as text. This is sufficient for just storing old datasets/spreadsheets securely in REDCap.
|
||||||
|
|
||||||
|
```{r eval=TRUE}
|
||||||
|
d1 <- mtcars |>
|
||||||
dplyr::mutate(record_id = seq_len(dplyr::n())) |>
|
dplyr::mutate(record_id = seq_len(dplyr::n())) |>
|
||||||
ds2dd() |>
|
ds2dd()
|
||||||
str()
|
|
||||||
|
d1 |>
|
||||||
|
gt::gt()
|
||||||
```
|
```
|
||||||
|
|
||||||
The more advanced `ds2dd_detailed()` is a natural development. It will try to apply the most common data classes for data validation and will assume that the first column is the id number. It outputs a list with the dataset with modified variable names to comply with REDCap naming conventions and a data dictionary.
|
The more advanced `ds2dd_detailed()` is a natural development. It will try to apply the most common data classes for data validation and will assume that the first column is the id number. It outputs a list with the dataset with modified variable names to comply with REDCap naming conventions and a data dictionary.
|
||||||
|
|
||||||
The dataset should be correctly formatted for the data dictionary to preserve as much information as possible.
|
The dataset should be correctly formatted for the data dictionary to preserve as much information as possible.
|
||||||
|
|
||||||
```{r eval=FALSE}
|
```{r eval=TRUE}
|
||||||
dd_ls <- mtcars |>
|
d2 <- REDCapCAST::redcapcast_data |>
|
||||||
dplyr::mutate(record_id = seq_len(dplyr::n())) |>
|
dplyr::mutate(record_id = seq_len(dplyr::n()),
|
||||||
|
region=factor(region)) |>
|
||||||
dplyr::select(record_id, dplyr::everything()) |>
|
dplyr::select(record_id, dplyr::everything()) |>
|
||||||
ds2dd_detailed()
|
(\(.x){
|
||||||
dd_ls |>
|
.x[!grepl("_complete$",names(.x))]
|
||||||
str()
|
})() |>
|
||||||
|
(\(.x){
|
||||||
|
.x[!grepl("^redcap",names(.x))]
|
||||||
|
})() |>
|
||||||
|
ds2dd_detailed() |>
|
||||||
|
purrr::pluck("meta")
|
||||||
|
|
||||||
|
d2 |>
|
||||||
|
gt::gt()
|
||||||
```
|
```
|
||||||
|
|
||||||
Additional specifications to the DataDictionary can be made manually, or it can be uploaded and modified manually in the graphical user interface on the web page.
|
Additional specifications to the DataDictionary can be made manually, or it can be uploaded and modified manually in the graphical user interface on the REDCap server.
|
||||||
|
|
||||||
## Step 3 - Meta data upload
|
## Data base from table
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Meta data and data upload
|
||||||
|
|
||||||
Now the DataDictionary can be exported as a spreadsheet and uploaded or it can be uploaded using the `REDCapR` package (only projects with "Development" status).
|
Now the DataDictionary can be exported as a spreadsheet and uploaded or it can be uploaded using the `REDCapR` package (only projects with "Development" status).
|
||||||
|
|
||||||
|
@ -14,10 +14,6 @@ knitr::opts_chunk$set(
|
|||||||
)
|
)
|
||||||
```
|
```
|
||||||
|
|
||||||
```{r setup}
|
|
||||||
library(REDCapCAST)
|
|
||||||
```
|
|
||||||
|
|
||||||
To make the easiest possible transition from spreadsheet/dataset to REDCap, I have created a small Shiny app, which adds a graphical interface to the casting of a data dictionary and data upload. Install the package and run the app as follows:
|
To make the easiest possible transition from spreadsheet/dataset to REDCap, I have created a small Shiny app, which adds a graphical interface to the casting of a data dictionary and data upload. Install the package and run the app as follows:
|
||||||
|
|
||||||
```{r eval=FALSE}
|
```{r eval=FALSE}
|
||||||
|
Loading…
Reference in New Issue
Block a user