From 20aa493eb39294ef2fa55e2acaf153e39c22f335 Mon Sep 17 00:00:00 2001 From: Athanasia Monika Mowinckel Date: Wed, 6 Nov 2024 21:05:37 +0100 Subject: [PATCH 01/16] add messy string functions --- DESCRIPTION | 2 +- R/messy_strings.R | 67 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 R/messy_strings.R diff --git a/DESCRIPTION b/DESCRIPTION index 9962849..b1afc92 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: messy Title: Create messy data from clean dataframes -Version: 0.0.1 +Version: 0.0.1001 Authors@R: c( person(given = "Nicola", family = "Rennie", role = c("aut", "cre", "cph"), email = "nrennie35@gmail.com", comment = c(ORCID = "0000-0003-4797-557X"))) diff --git a/R/messy_strings.R b/R/messy_strings.R new file mode 100644 index 0000000..ee20e4b --- /dev/null +++ b/R/messy_strings.R @@ -0,0 +1,67 @@ +#' Make character vector messy +#' +#' Adds special characters and randomly +#' capitalises characters in the provided +#' character vector. +#' +#' @paramd x string vector to mess up +#' @return string vector that is messed up +#' @examples +#' +#' make_string_messy(c("Hello", "world")) +make_string_messy <- function(x){ + sapply(x, messy_string, USE.NAMES = FALSE) +} + +#' Make column names messy +#' +#' Adds special characters and randomly +#' capitalises characters in the column +#' names of a data frame. +#' @paramd df data.frame to alter column names +#' @return data.frame with messy column names +#' @examples +#' +#' make_column_names_messy(iris) +make_column_names_messy <- function(df) { + # Assign the new column names to the dataframe + names(df) <- make_string_messy(names(df)) + + return(df) +} + +#' Function to make a string messy +#' +#' Adds special characters and randomly +#' capitalises strings. +#' @params s string to mess up +#' @return messy string +#' @noRd +messy_string <- function(s) { + random_chars <- c("!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "_", "+", "-", ".") + + # Convert to vector of characters + chars <- strsplit(s, NULL)[[1]] + + # Randomly change the case of each character using sapply + chars <- sapply(chars, function(char) { + if (runif(1) < 0.5) { + return(toupper(char)) + } else { + return(tolower(char)) + } + }) + + # Randomly insert special characters using lapply + chars <- Reduce(function(acc, char) { + if (runif(1) < 0.2) { + char_to_insert <- sample(random_chars, 1) + return(c(acc, char_to_insert, char)) + } else { + return(c(acc, char)) + } + }, chars, init = character(0)) + + # Reassemble the string + return(paste(chars, collapse = "")) +} From db63665d36d05e328eb547dfd8aefce319bb9a8a Mon Sep 17 00:00:00 2001 From: Athanasia Monika Mowinckel Date: Wed, 6 Nov 2024 21:15:19 +0100 Subject: [PATCH 02/16] add docs to pass checks --- NAMESPACE | 3 +++ R/messy_strings.R | 11 ++++++----- man/make_column_names_messy.Rd | 22 ++++++++++++++++++++++ man/make_string_messy.Rd | 22 ++++++++++++++++++++++ 4 files changed, 53 insertions(+), 5 deletions(-) create mode 100644 man/make_column_names_messy.Rd create mode 100644 man/make_string_messy.Rd diff --git a/NAMESPACE b/NAMESPACE index 19d984b..f41ff1b 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -2,6 +2,9 @@ export(add_whitespace) export(change_case) +export(make_column_names_messy) export(make_missing) +export(make_string_messy) export(messy) importFrom(rlang,.data) +importFrom(stats,runif) diff --git a/R/messy_strings.R b/R/messy_strings.R index ee20e4b..432fe3a 100644 --- a/R/messy_strings.R +++ b/R/messy_strings.R @@ -4,10 +4,10 @@ #' capitalises characters in the provided #' character vector. #' -#' @paramd x string vector to mess up +#' @param x string vector to mess up #' @return string vector that is messed up +#' @export #' @examples -#' #' make_string_messy(c("Hello", "world")) make_string_messy <- function(x){ sapply(x, messy_string, USE.NAMES = FALSE) @@ -18,10 +18,10 @@ make_string_messy <- function(x){ #' Adds special characters and randomly #' capitalises characters in the column #' names of a data frame. -#' @paramd df data.frame to alter column names +#' @param df data.frame to alter column names #' @return data.frame with messy column names +#' @export #' @examples -#' #' make_column_names_messy(iris) make_column_names_messy <- function(df) { # Assign the new column names to the dataframe @@ -34,8 +34,9 @@ make_column_names_messy <- function(df) { #' #' Adds special characters and randomly #' capitalises strings. -#' @params s string to mess up +#' @param s string to mess up #' @return messy string +#' @importFrom stats runif #' @noRd messy_string <- function(s) { random_chars <- c("!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "_", "+", "-", ".") diff --git a/man/make_column_names_messy.Rd b/man/make_column_names_messy.Rd new file mode 100644 index 0000000..bab998c --- /dev/null +++ b/man/make_column_names_messy.Rd @@ -0,0 +1,22 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/messy_strings.R +\name{make_column_names_messy} +\alias{make_column_names_messy} +\title{Make column names messy} +\usage{ +make_column_names_messy(df) +} +\arguments{ +\item{df}{data.frame to alter column names} +} +\value{ +data.frame with messy column names +} +\description{ +Adds special characters and randomly +capitalises characters in the column +names of a data frame. +} +\examples{ +make_column_names_messy(iris) +} diff --git a/man/make_string_messy.Rd b/man/make_string_messy.Rd new file mode 100644 index 0000000..a8ffc35 --- /dev/null +++ b/man/make_string_messy.Rd @@ -0,0 +1,22 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/messy_strings.R +\name{make_string_messy} +\alias{make_string_messy} +\title{Make character vector messy} +\usage{ +make_string_messy(x) +} +\arguments{ +\item{x}{string vector to mess up} +} +\value{ +string vector that is messed up +} +\description{ +Adds special characters and randomly +capitalises characters in the provided +character vector. +} +\examples{ +make_string_messy(c("Hello", "world")) +} From abc8b620e39780b2a10991d02274dfd616e2a4cc Mon Sep 17 00:00:00 2001 From: nrennie Date: Sun, 17 Nov 2024 14:05:20 +0000 Subject: [PATCH 03/16] split into two files and don't use iris --- DESCRIPTION | 2 +- NAMESPACE | 2 +- R/messy_colnames.R | 15 ++++++++++ R/messy_strings.R | 29 ++++--------------- ...olumn_names_messy.Rd => messy_colnames.Rd} | 12 ++++---- 5 files changed, 29 insertions(+), 31 deletions(-) create mode 100644 R/messy_colnames.R rename man/{make_column_names_messy.Rd => messy_colnames.Rd} (55%) diff --git a/DESCRIPTION b/DESCRIPTION index b1afc92..cccde8f 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -20,4 +20,4 @@ Suggests: Config/testthat/edition: 3 Encoding: UTF-8 Roxygen: list(markdown = TRUE) -RoxygenNote: 7.3.1 +RoxygenNote: 7.3.2 diff --git a/NAMESPACE b/NAMESPACE index f41ff1b..2de6eec 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -2,9 +2,9 @@ export(add_whitespace) export(change_case) -export(make_column_names_messy) export(make_missing) export(make_string_messy) export(messy) +export(messy_colnames) importFrom(rlang,.data) importFrom(stats,runif) diff --git a/R/messy_colnames.R b/R/messy_colnames.R new file mode 100644 index 0000000..2fcca31 --- /dev/null +++ b/R/messy_colnames.R @@ -0,0 +1,15 @@ +#' Make column names messy +#' +#' Adds special characters and randomly +#' capitalises characters in the column +#' names of a data frame. +#' @param data data.frame to alter column names +#' @return data.frame with messy column names +#' @export +#' @examples +#' make_column_names_messy(mtcars) +messy_colnames <- function(data) { + # Assign the new column names to the dataframe + names(data) <- make_string_messy(names(data)) + return(data) +} diff --git a/R/messy_strings.R b/R/messy_strings.R index 432fe3a..c0b59f2 100644 --- a/R/messy_strings.R +++ b/R/messy_strings.R @@ -1,9 +1,9 @@ #' Make character vector messy -#' +#' #' Adds special characters and randomly #' capitalises characters in the provided #' character vector. -#' +#' #' @param x string vector to mess up #' @return string vector that is messed up #' @export @@ -13,25 +13,8 @@ make_string_messy <- function(x){ sapply(x, messy_string, USE.NAMES = FALSE) } -#' Make column names messy -#' -#' Adds special characters and randomly -#' capitalises characters in the column -#' names of a data frame. -#' @param df data.frame to alter column names -#' @return data.frame with messy column names -#' @export -#' @examples -#' make_column_names_messy(iris) -make_column_names_messy <- function(df) { - # Assign the new column names to the dataframe - names(df) <- make_string_messy(names(df)) - - return(df) -} - #' Function to make a string messy -#' +#' #' Adds special characters and randomly #' capitalises strings. #' @param s string to mess up @@ -43,7 +26,7 @@ messy_string <- function(s) { # Convert to vector of characters chars <- strsplit(s, NULL)[[1]] - + # Randomly change the case of each character using sapply chars <- sapply(chars, function(char) { if (runif(1) < 0.5) { @@ -52,7 +35,7 @@ messy_string <- function(s) { return(tolower(char)) } }) - + # Randomly insert special characters using lapply chars <- Reduce(function(acc, char) { if (runif(1) < 0.2) { @@ -62,7 +45,7 @@ messy_string <- function(s) { return(c(acc, char)) } }, chars, init = character(0)) - + # Reassemble the string return(paste(chars, collapse = "")) } diff --git a/man/make_column_names_messy.Rd b/man/messy_colnames.Rd similarity index 55% rename from man/make_column_names_messy.Rd rename to man/messy_colnames.Rd index bab998c..4978aa6 100644 --- a/man/make_column_names_messy.Rd +++ b/man/messy_colnames.Rd @@ -1,13 +1,13 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/messy_strings.R -\name{make_column_names_messy} -\alias{make_column_names_messy} +% Please edit documentation in R/messy_colnames.R +\name{messy_colnames} +\alias{messy_colnames} \title{Make column names messy} \usage{ -make_column_names_messy(df) +messy_colnames(data) } \arguments{ -\item{df}{data.frame to alter column names} +\item{data}{data.frame to alter column names} } \value{ data.frame with messy column names @@ -18,5 +18,5 @@ capitalises characters in the column names of a data frame. } \examples{ -make_column_names_messy(iris) +make_column_names_messy(mtcars) } From 5b2ab3b5477587c7d35e3fa8f60c36d2f2057494 Mon Sep 17 00:00:00 2001 From: nrennie Date: Sun, 17 Nov 2024 14:06:21 +0000 Subject: [PATCH 04/16] add lintr file --- .lintr | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .lintr diff --git a/.lintr b/.lintr new file mode 100644 index 0000000..4dc4717 --- /dev/null +++ b/.lintr @@ -0,0 +1,7 @@ +linters: linters_with_defaults( + line_length_linter = line_length_linter(160), + T_and_F_symbol_linter(), + assignment_linter(), + object_name_linter = NULL, + brace_linter = NULL + ) From dac23b10cb6f9eff2fc51f30f7dab11c8eded13d Mon Sep 17 00:00:00 2001 From: nrennie Date: Sun, 17 Nov 2024 14:08:47 +0000 Subject: [PATCH 05/16] linting --- .Rbuildignore | 1 + R/globalVariables.R | 1 + R/messy_strings.R | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 R/globalVariables.R diff --git a/.Rbuildignore b/.Rbuildignore index 538c330..120a310 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -4,3 +4,4 @@ ^README\.Rmd$ ^cran-comments\.md$ .github +.lintr diff --git a/R/globalVariables.R b/R/globalVariables.R new file mode 100644 index 0000000..8074801 --- /dev/null +++ b/R/globalVariables.R @@ -0,0 +1 @@ +utils::globalVariables(".data") diff --git a/R/messy_strings.R b/R/messy_strings.R index c0b59f2..842ad9e 100644 --- a/R/messy_strings.R +++ b/R/messy_strings.R @@ -9,7 +9,7 @@ #' @export #' @examples #' make_string_messy(c("Hello", "world")) -make_string_messy <- function(x){ +make_string_messy <- function(x) { sapply(x, messy_string, USE.NAMES = FALSE) } From fd74708bfb2140f3504c14e9e15f10ac12f4f60c Mon Sep 17 00:00:00 2001 From: nrennie Date: Sun, 17 Nov 2024 14:24:45 +0000 Subject: [PATCH 06/16] add pkgdown website --- .Rbuildignore | 4 ++ .github/workflows/pkgdown.yaml | 49 +++++++++++++++++++ .gitignore | 1 + DESCRIPTION | 3 ++ _pkgdown.yml | 5 ++ pkgdown/favicon/apple-touch-icon.png | Bin 0 -> 14850 bytes pkgdown/favicon/favicon-96x96.png | Bin 0 -> 5977 bytes pkgdown/favicon/favicon.ico | Bin 0 -> 15086 bytes pkgdown/favicon/favicon.svg | 3 ++ pkgdown/favicon/site.webmanifest | 21 ++++++++ pkgdown/favicon/web-app-manifest-192x192.png | Bin 0 -> 16469 bytes pkgdown/favicon/web-app-manifest-512x512.png | Bin 0 -> 77077 bytes 12 files changed, 86 insertions(+) create mode 100644 .github/workflows/pkgdown.yaml create mode 100644 _pkgdown.yml create mode 100644 pkgdown/favicon/apple-touch-icon.png create mode 100644 pkgdown/favicon/favicon-96x96.png create mode 100644 pkgdown/favicon/favicon.ico create mode 100644 pkgdown/favicon/favicon.svg create mode 100644 pkgdown/favicon/site.webmanifest create mode 100644 pkgdown/favicon/web-app-manifest-192x192.png create mode 100644 pkgdown/favicon/web-app-manifest-512x512.png diff --git a/.Rbuildignore b/.Rbuildignore index 120a310..0f61770 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -5,3 +5,7 @@ ^cran-comments\.md$ .github .lintr +^_pkgdown\.yml$ +^docs$ +^pkgdown$ +^\.github$ diff --git a/.github/workflows/pkgdown.yaml b/.github/workflows/pkgdown.yaml new file mode 100644 index 0000000..bfc9f4d --- /dev/null +++ b/.github/workflows/pkgdown.yaml @@ -0,0 +1,49 @@ +# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples +# Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help +on: + push: + branches: [main, master] + pull_request: + release: + types: [published] + workflow_dispatch: + +name: pkgdown.yaml + +permissions: read-all + +jobs: + pkgdown: + runs-on: ubuntu-latest + # Only restrict concurrency for non-PR jobs + concurrency: + group: pkgdown-${{ github.event_name != 'pull_request' || github.run_id }} + env: + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + permissions: + contents: write + steps: + - uses: actions/checkout@v4 + + - uses: r-lib/actions/setup-pandoc@v2 + + - uses: r-lib/actions/setup-r@v2 + with: + use-public-rspm: true + + - uses: r-lib/actions/setup-r-dependencies@v2 + with: + extra-packages: any::pkgdown, local::. + needs: website + + - name: Build site + run: pkgdown::build_site_github_pages(new_process = FALSE, install = FALSE) + shell: Rscript {0} + + - name: Deploy to GitHub pages 🚀 + if: github.event_name != 'pull_request' + uses: JamesIves/github-pages-deploy-action@v4.5.0 + with: + clean: false + branch: gh-pages + folder: docs diff --git a/.gitignore b/.gitignore index 5b6a065..234f028 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ .Rhistory .RData .Ruserdata +docs diff --git a/DESCRIPTION b/DESCRIPTION index cccde8f..1b34249 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -21,3 +21,6 @@ Config/testthat/edition: 3 Encoding: UTF-8 Roxygen: list(markdown = TRUE) RoxygenNote: 7.3.2 +Config/Needs/website: nrennie/nrenniepkgdown +URL: http://nrennie.rbind.io/messy/, https://github.com/nrennie/messy +BugReports: https://github.com/nrennie/messy/issues diff --git a/_pkgdown.yml b/_pkgdown.yml new file mode 100644 index 0000000..e6fea9e --- /dev/null +++ b/_pkgdown.yml @@ -0,0 +1,5 @@ +url: https://nrennie.rbind.io/messy/ +template: + package: nrenniepkgdown + bootstrap: 5 + diff --git a/pkgdown/favicon/apple-touch-icon.png b/pkgdown/favicon/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5b5e8a73399780593582e5b9aa505098277f43f6 GIT binary patch literal 14850 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 literal 0 HcmV?d00001 diff --git a/pkgdown/favicon/favicon-96x96.png b/pkgdown/favicon/favicon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..5e904e18327d82e0a7851352418627b0aa6caa51 GIT binary patch literal 5977 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 Hu0mjfJr8%5 literal 0 HcmV?d00001 diff --git a/pkgdown/favicon/favicon.ico b/pkgdown/favicon/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..2c03a30db8b3107c716c4b14e9bf5f2658c4eed8 GIT binary patch literal 15086 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 literal 0 HcmV?d00001 diff --git a/pkgdown/favicon/favicon.svg b/pkgdown/favicon/favicon.svg new file mode 100644 index 0000000..8570e10 --- /dev/null +++ b/pkgdown/favicon/favicon.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/pkgdown/favicon/site.webmanifest b/pkgdown/favicon/site.webmanifest new file mode 100644 index 0000000..4ebda26 --- /dev/null +++ b/pkgdown/favicon/site.webmanifest @@ -0,0 +1,21 @@ +{ + "name": "", + "short_name": "", + "icons": [ + { + "src": "/web-app-manifest-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "/web-app-manifest-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} \ No newline at end of file diff --git a/pkgdown/favicon/web-app-manifest-192x192.png b/pkgdown/favicon/web-app-manifest-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..c5a9be0947c8f972dc4831d7db609ae2281857d1 GIT binary patch literal 16469 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 I(eBOv09E+DH2?qr literal 0 HcmV?d00001 diff --git a/pkgdown/favicon/web-app-manifest-512x512.png b/pkgdown/favicon/web-app-manifest-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..bb4c105a847e3f086bf00e8479a5fa395922c1ff GIT binary patch literal 77077 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

y4Ag5l*Xe!OM4ptA;agS;J0y{}S}NH^pQ0kj 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 E19Bl0iU0rr literal 0 HcmV?d00001 From 9a71181b3816224a9cd70f00f8c8a59d17294f7c Mon Sep 17 00:00:00 2001 From: nrennie Date: Sun, 17 Nov 2024 14:29:43 +0000 Subject: [PATCH 07/16] bug fixes --- DESCRIPTION | 2 +- R/messy_colnames.R | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 1b34249..c0b267f 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -22,5 +22,5 @@ Encoding: UTF-8 Roxygen: list(markdown = TRUE) RoxygenNote: 7.3.2 Config/Needs/website: nrennie/nrenniepkgdown -URL: http://nrennie.rbind.io/messy/, https://github.com/nrennie/messy +URL: http://nrennie.rbind.io/messy, https://github.com/nrennie/messy BugReports: https://github.com/nrennie/messy/issues diff --git a/R/messy_colnames.R b/R/messy_colnames.R index 2fcca31..5ecd021 100644 --- a/R/messy_colnames.R +++ b/R/messy_colnames.R @@ -7,7 +7,7 @@ #' @return data.frame with messy column names #' @export #' @examples -#' make_column_names_messy(mtcars) +#' messy_colnames(mtcars) messy_colnames <- function(data) { # Assign the new column names to the dataframe names(data) <- make_string_messy(names(data)) From 1e1f93153e3475a23b213354d8b8190df330138c Mon Sep 17 00:00:00 2001 From: nrennie Date: Sun, 17 Nov 2024 14:30:52 +0000 Subject: [PATCH 08/16] update news --- NEWS.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/NEWS.md b/NEWS.md index b9ccb9d..52a3189 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,10 @@ +# messy 0.0.1001+ + +* Add pkgdown site +* Add lintr file +* Add `messy_colnames()` function +* Add `messy_strings()` function + # messy 0.0.1 * Add `add_whitespaces()` function From 45896c8a88464c19e527c6b21be3686a3f80acb9 Mon Sep 17 00:00:00 2001 From: nrennie Date: Sun, 17 Nov 2024 14:31:13 +0000 Subject: [PATCH 09/16] write docs --- man/messy_colnames.Rd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/man/messy_colnames.Rd b/man/messy_colnames.Rd index 4978aa6..b482524 100644 --- a/man/messy_colnames.Rd +++ b/man/messy_colnames.Rd @@ -18,5 +18,5 @@ capitalises characters in the column names of a data frame. } \examples{ -make_column_names_messy(mtcars) +messy_colnames(mtcars) } From c55d2c1a1f09cde13bbb631373d0847ff2a1ee4b Mon Sep 17 00:00:00 2001 From: nrennie Date: Sun, 17 Nov 2024 15:28:28 +0000 Subject: [PATCH 10/16] fix special chars and missing bugs --- NAMESPACE | 3 +- R/add_special_chars.R | 86 ++++++++++++++++++++++++++++++++++++++++ R/change_case.R | 19 ++++++++- R/make_missing.R | 4 +- R/messy.R | 9 +++-- R/messy_colnames.R | 2 +- R/messy_strings.R | 51 ------------------------ R/utils.R | 7 ++++ README.md | 78 +++++++++++++++++++++++------------- man/add_special_chars.Rd | 26 ++++++++++++ man/change_case.Rd | 6 ++- man/make_string_messy.Rd | 22 ---------- man/messy.Rd | 5 ++- 13 files changed, 207 insertions(+), 111 deletions(-) create mode 100644 R/add_special_chars.R delete mode 100644 R/messy_strings.R create mode 100644 R/utils.R create mode 100644 man/add_special_chars.Rd delete mode 100644 man/make_string_messy.Rd diff --git a/NAMESPACE b/NAMESPACE index 2de6eec..2ab1d45 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,10 +1,9 @@ # Generated by roxygen2: do not edit by hand +export(add_special_chars) export(add_whitespace) export(change_case) export(make_missing) -export(make_string_messy) export(messy) export(messy_colnames) importFrom(rlang,.data) -importFrom(stats,runif) diff --git a/R/add_special_chars.R b/R/add_special_chars.R new file mode 100644 index 0000000..ebaf937 --- /dev/null +++ b/R/add_special_chars.R @@ -0,0 +1,86 @@ +#' Add special characters to strings + +#' @param data input dataframe +#' @param cols set of columns to apply transformation to. If `NULL` +#' will apply to all columns. Default `NULL`. +#' @param messiness Percentage of values to change. Must be +#' between 0 and 1. Default 0.1. +#' @importFrom rlang .data +#' @return a dataframe the same size as the input data. +#' @export +#' @examples +#' add_special_chars(mtcars) +add_special_chars <- function(data, + cols = NULL, + messiness = 0.1) { + if (messiness < 0 || messiness > 1) { + stop("'messiness' must be between 0 and 1") + } + if (is.null(cols)) { + output <- data |> + dplyr::mutate( + dplyr::across( + dplyr::where(~ is.character(.x) | is.factor(.x)), + ~ special_chars(.x, messiness = messiness) + ) + ) + } else { + # check if all cols present in colnames + if (!all((cols %in% colnames(data)))) { + stop("All elements of 'cols' must be a column name in 'data'") + } else { + output <- data |> + dplyr::mutate( + dplyr::across( + dplyr::all_of(cols) & + dplyr::where(~ is.character(.x) | is.factor(.x)), + ~ special_chars(.x, messiness = messiness) + ) + ) + } + } + return(output) +} + +#' Function to make a character string messy +#' +#' Adds special characters and randomly +#' capitalises strings. +#' @param x Character vector +#' @param messiness Percentage of values to change. Must be +#' between 0 and 1. Default 0.1. +#' @return Messy character vector +#' @noRd +special_chars <- function(x, messiness = 0.1) { + # if factor, convert to character + if (is.factor(x)) { + x <- as.character(x) + } + + special_chars_string <- function(s, ...) { + # characters to insert + random_chars <- c( + "!", "@", "#", "$", "%", "^", "&", + "*", "(", ")", "_", "+", "-", "." + ) + + # Convert to vector of characters + chars <- strsplit(s, NULL)[[1]] + + # Randomly insert special characters using lapply + chars <- Reduce(function(acc, char) { + if (stats::runif(1) < messiness) { + char_to_insert <- sample(random_chars, 1) + return(c(acc, char_to_insert, char)) + } else { + return(c(acc, char)) + } + }, chars, init = character(0)) + + # Reassemble the string + return(paste(chars, collapse = "")) + } + + x_messy <- sapply(x, special_chars_string, USE.NAMES = FALSE) + return(x_messy) +} diff --git a/R/change_case.R b/R/change_case.R index 0170186..9a4b346 100644 --- a/R/change_case.R +++ b/R/change_case.R @@ -1,21 +1,29 @@ #' Change case #' #' Randomly switch between title case and lowercase for +#' character strings #' @param data input dataframe #' @param cols set of columns to apply transformation to. If `NULL` #' will apply to all columns. Default `NULL`. #' @param messiness Percentage of values to change. Must be #' between 0 and 1. Default 0.1. +#' @param case_type Whether the case should change based on +#' the `"word"` or `"letter"`. #' @importFrom rlang .data #' @return a dataframe the same size as the input data. #' @export change_case <- function(data, cols = NULL, - messiness = 0.1) { + messiness = 0.1, + case_type = "word") { if (messiness < 0 || messiness > 1) { stop("'messiness' must be between 0 and 1") } + if (!(case_type %in% c("word", "letter"))) { + stop("'case_type' must be either 'word' or 'letter'") + } + if (is.null(cols)) { output <- data |> dplyr::mutate( @@ -59,3 +67,12 @@ change_case <- function(data, } return(output) } + +# # Randomly change the case of each character using sapply +# chars <- sapply(chars, function(char) { +# if (stats::runif(1) < 0.5) { +# return(toupper(char)) +# } else { +# return(tolower(char)) +# } +# }) diff --git a/R/make_missing.R b/R/make_missing.R index d8d4775..2f1fbd9 100644 --- a/R/make_missing.R +++ b/R/make_missing.R @@ -27,7 +27,7 @@ make_missing <- function(data, dplyr::across( dplyr::everything(), ~ dplyr::case_when( - runif(nrow(data)) <= messiness ~ unlist(sample(missing, 1)), + runif(nrow(data)) <= messiness ~ unlist(resample(missing, 1)), TRUE ~ .x ) ) @@ -42,7 +42,7 @@ make_missing <- function(data, dplyr::across( dplyr::all_of(cols), ~ dplyr::case_when( - runif(nrow(data)) <= messiness ~ unlist(sample(missing, 1)), + runif(nrow(data)) <= messiness ~ unlist(resample(missing, 1)), TRUE ~ .x ) ) diff --git a/R/messy.R b/R/messy.R index 38b838a..e0b9f6e 100644 --- a/R/messy.R +++ b/R/messy.R @@ -8,16 +8,19 @@ #' missing values will be replaced with. If length is greater #' than 1, values will be replaced randomly. #' Default `NA`. +#' @param case_type Whether the case should change based on +#' the `"word"` or `"letter"`. #' @return a dataframe the same size as the input data. #' @export - messy <- function(data, messiness = 0.1, - missing = NA) { + missing = NA, + case_type = "word") { output <- data |> + add_special_chars(messiness = messiness) |> add_whitespace(messiness = messiness) |> make_missing(messiness = messiness, missing = missing) |> - change_case(messiness = messiness) + change_case(messiness = messiness, case_type = case_type) return(output) } diff --git a/R/messy_colnames.R b/R/messy_colnames.R index 5ecd021..a74aa7f 100644 --- a/R/messy_colnames.R +++ b/R/messy_colnames.R @@ -10,6 +10,6 @@ #' messy_colnames(mtcars) messy_colnames <- function(data) { # Assign the new column names to the dataframe - names(data) <- make_string_messy(names(data)) + names(data) <- special_chars(names(data)) return(data) } diff --git a/R/messy_strings.R b/R/messy_strings.R deleted file mode 100644 index 842ad9e..0000000 --- a/R/messy_strings.R +++ /dev/null @@ -1,51 +0,0 @@ -#' Make character vector messy -#' -#' Adds special characters and randomly -#' capitalises characters in the provided -#' character vector. -#' -#' @param x string vector to mess up -#' @return string vector that is messed up -#' @export -#' @examples -#' make_string_messy(c("Hello", "world")) -make_string_messy <- function(x) { - sapply(x, messy_string, USE.NAMES = FALSE) -} - -#' Function to make a string messy -#' -#' Adds special characters and randomly -#' capitalises strings. -#' @param s string to mess up -#' @return messy string -#' @importFrom stats runif -#' @noRd -messy_string <- function(s) { - random_chars <- c("!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "_", "+", "-", ".") - - # Convert to vector of characters - chars <- strsplit(s, NULL)[[1]] - - # Randomly change the case of each character using sapply - chars <- sapply(chars, function(char) { - if (runif(1) < 0.5) { - return(toupper(char)) - } else { - return(tolower(char)) - } - }) - - # Randomly insert special characters using lapply - chars <- Reduce(function(acc, char) { - if (runif(1) < 0.2) { - char_to_insert <- sample(random_chars, 1) - return(c(acc, char_to_insert, char)) - } else { - return(c(acc, char)) - } - }, chars, init = character(0)) - - # Reassemble the string - return(paste(chars, collapse = "")) -} diff --git a/R/utils.R b/R/utils.R new file mode 100644 index 0000000..4b1e027 --- /dev/null +++ b/R/utils.R @@ -0,0 +1,7 @@ +#' Resample +#' +#' Resamples x of a specifc size +#' @param x either a vector of one or more elements from which to choose. +#' @return a vector of length size with elements drawn from either x +#' @noRd +resample <- function(x, ...) x[sample.int(length(x), ...)] diff --git a/README.md b/README.md index e2cb407..e824baa 100644 --- a/README.md +++ b/README.md @@ -24,17 +24,17 @@ messy(ToothGrowth[1:10,]) ``` ```r - len supp dose -1 4.2 vc 0.5 -2 11.5 VC 0.5 -3 7.3 VC 0.5 -4 5.8 VC 0.5 -5 6.4 VC 0.5 -6 10 VC 0.5 -7 11.2 VC 0.5 -8 11.2 VC 0.5 -9 5.2 VC 0.5 -10 7 + len supp dose +1 4.2 VC 0.5 +2 11.5 +3 7.3 VC 0.5 +4 5.8 (VC 0.5 +5 6.4 VC +6 10 VC 0.5 +7 11.2 0.5 +8 11.2 VC 0.5 +9 5.2 VC 0.5 +10 7 VC 0.5 ``` Increase how *messy* the data is: @@ -45,17 +45,17 @@ messy(ToothGrowth[1:10,], messiness = 0.7) ``` ```r - len supp dose -1 0.5 -2 -3 -4 -5 -6 10 0.5 -7 -8 0.5 -9 5.2 VC 0.5 -10 7 + len supp dose +1 +2 11.5 +3 +4 5.8 +5 .v*c +6 +7 +8 0.5 +9 v@c +10 ``` ### `add_whitespace()` @@ -125,6 +125,29 @@ change_case(ToothGrowth[1:10,], messiness = 0.5) 10 7.0 VC 0.5 ``` +### `add_special_chars()` + +Randomly add special characters to character strings: + +```r +set.seed(1234) +add_special_chars(ToothGrowth[1:10,]) +``` + +```r + len supp dose +1 4.2 VC 0.5 +2 11.5 VC 0.5 +3 7.3 VC 0.5 +4 5.8 (VC 0.5 +5 6.4 VC 0.5 +6 10.0 VC 0.5 +7 11.2 VC 0.5 +8 11.2 VC 0.5 +9 5.2 VC 0.5 +10 7.0 VC 0.5 +``` + ### `make_missing()` Randomly make some values missing using `NA`: @@ -178,7 +201,8 @@ set.seed(1234) ToothGrowth[1:10,] |> make_missing(cols = "supp", missing = " ") |> make_missing(cols = c("len", "dose"), missing = c(NA, 999)) |> - add_whitespace(cols = "supp", messiness = 0.5) + add_whitespace(cols = "supp", messiness = 0.5) |> + add_special_chars(cols = "supp") ``` ```r @@ -186,11 +210,11 @@ ToothGrowth[1:10,] |> 1 4.2 VC 0.5 2 11.5 VC NA 3 7.3 VC 0.5 -4 5.8 VC 0.5 +4 5.8 *VC 0.5 5 6.4 VC 0.5 6 10.0 VC 0.5 7 11.2 0.5 -8 11.2 VC NA -9 5.2 VC 0.5 -10 7.0 VC 0.5 +8 11.2 V#C NA +9 5.2 !VC 0.5 +10 7.0 VC* 0.5 ``` diff --git a/man/add_special_chars.Rd b/man/add_special_chars.Rd new file mode 100644 index 0000000..fa4b4a7 --- /dev/null +++ b/man/add_special_chars.Rd @@ -0,0 +1,26 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/add_special_chars.R +\name{add_special_chars} +\alias{add_special_chars} +\title{Add special characters to strings} +\usage{ +add_special_chars(data, cols = NULL, messiness = 0.1) +} +\arguments{ +\item{data}{input dataframe} + +\item{cols}{set of columns to apply transformation to. If \code{NULL} +will apply to all columns. Default \code{NULL}.} + +\item{messiness}{Percentage of values to change. Must be +between 0 and 1. Default 0.1.} +} +\value{ +a dataframe the same size as the input data. +} +\description{ +Add special characters to strings +} +\examples{ +add_special_chars(mtcars) +} diff --git a/man/change_case.Rd b/man/change_case.Rd index e126b3f..3752fa9 100644 --- a/man/change_case.Rd +++ b/man/change_case.Rd @@ -4,7 +4,7 @@ \alias{change_case} \title{Change case} \usage{ -change_case(data, cols = NULL, messiness = 0.1) +change_case(data, cols = NULL, messiness = 0.1, case_type = "word") } \arguments{ \item{data}{input dataframe} @@ -14,10 +14,14 @@ will apply to all columns. Default \code{NULL}.} \item{messiness}{Percentage of values to change. Must be between 0 and 1. Default 0.1.} + +\item{case_type}{Whether the case should change based on +the \code{"word"} or \code{"letter"}.} } \value{ a dataframe the same size as the input data. } \description{ Randomly switch between title case and lowercase for +character strings } diff --git a/man/make_string_messy.Rd b/man/make_string_messy.Rd deleted file mode 100644 index a8ffc35..0000000 --- a/man/make_string_messy.Rd +++ /dev/null @@ -1,22 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/messy_strings.R -\name{make_string_messy} -\alias{make_string_messy} -\title{Make character vector messy} -\usage{ -make_string_messy(x) -} -\arguments{ -\item{x}{string vector to mess up} -} -\value{ -string vector that is messed up -} -\description{ -Adds special characters and randomly -capitalises characters in the provided -character vector. -} -\examples{ -make_string_messy(c("Hello", "world")) -} diff --git a/man/messy.Rd b/man/messy.Rd index 873e9ad..ae5c341 100644 --- a/man/messy.Rd +++ b/man/messy.Rd @@ -4,7 +4,7 @@ \alias{messy} \title{Messy} \usage{ -messy(data, messiness = 0.1, missing = NA) +messy(data, messiness = 0.1, missing = NA, case_type = "word") } \arguments{ \item{data}{input dataframe} @@ -16,6 +16,9 @@ between 0 and 1. Default 0.1.} missing values will be replaced with. If length is greater than 1, values will be replaced randomly. Default \code{NA}.} + +\item{case_type}{Whether the case should change based on +the \code{"word"} or \code{"letter"}.} } \value{ a dataframe the same size as the input data. From ba797761d3ed5d464b663a8701926e24df7632a6 Mon Sep 17 00:00:00 2001 From: nrennie Date: Sun, 17 Nov 2024 15:35:33 +0000 Subject: [PATCH 11/16] add colnames example --- R/change_case.R | 69 ++++++++++++++++++++++++------------------- R/messy_colnames.R | 11 +++++-- README.md | 23 +++++++++++++++ man/messy_colnames.Rd | 5 +++- 4 files changed, 74 insertions(+), 34 deletions(-) diff --git a/R/change_case.R b/R/change_case.R index 9a4b346..fcfacaf 100644 --- a/R/change_case.R +++ b/R/change_case.R @@ -24,36 +24,27 @@ change_case <- function(data, stop("'case_type' must be either 'word' or 'letter'") } - if (is.null(cols)) { - output <- data |> - dplyr::mutate( - rs_col = stats::runif(nrow(data)) - ) |> - dplyr::mutate( - dplyr::across( - dplyr::where(~ is.character(.x) | is.factor(.x)), - ~ dplyr::case_when( - .data$rs_col <= messiness / 2 ~ stringr::str_to_lower(.x), - (.data$rs_col > messiness / 2 & .data$rs_col <= messiness) ~ - stringr::str_to_upper(.x), - TRUE ~ .x - ) - ) - ) |> - dplyr::select(-.data$rs_col) + if (case_type == "letter") { + + # # Randomly change the case of each character using sapply + # chars <- sapply(chars, function(char) { + # if (stats::runif(1) < 0.5) { + # return(toupper(char)) + # } else { + # return(tolower(char)) + # } + # }) + + } else { - # check if all cols present in colnames - if (!all((cols %in% colnames(data)))) { - stop("All elements of 'cols' must be a column name in 'data'") - } else { + if (is.null(cols)) { output <- data |> dplyr::mutate( rs_col = stats::runif(nrow(data)) ) |> dplyr::mutate( dplyr::across( - dplyr::all_of(cols) & - dplyr::where(~ is.character(.x) | is.factor(.x)), + dplyr::where(~ is.character(.x) | is.factor(.x)), ~ dplyr::case_when( .data$rs_col <= messiness / 2 ~ stringr::str_to_lower(.x), (.data$rs_col > messiness / 2 & .data$rs_col <= messiness) ~ @@ -63,16 +54,32 @@ change_case <- function(data, ) ) |> dplyr::select(-.data$rs_col) + } else { + # check if all cols present in colnames + if (!all((cols %in% colnames(data)))) { + stop("All elements of 'cols' must be a column name in 'data'") + } else { + output <- data |> + dplyr::mutate( + rs_col = stats::runif(nrow(data)) + ) |> + dplyr::mutate( + dplyr::across( + dplyr::all_of(cols) & + dplyr::where(~ is.character(.x) | is.factor(.x)), + ~ dplyr::case_when( + .data$rs_col <= messiness / 2 ~ stringr::str_to_lower(.x), + (.data$rs_col > messiness / 2 & .data$rs_col <= messiness) ~ + stringr::str_to_upper(.x), + TRUE ~ .x + ) + ) + ) |> + dplyr::select(-.data$rs_col) + } } } return(output) } -# # Randomly change the case of each character using sapply -# chars <- sapply(chars, function(char) { -# if (stats::runif(1) < 0.5) { -# return(toupper(char)) -# } else { -# return(tolower(char)) -# } -# }) + diff --git a/R/messy_colnames.R b/R/messy_colnames.R index a74aa7f..f8f59b1 100644 --- a/R/messy_colnames.R +++ b/R/messy_colnames.R @@ -4,12 +4,19 @@ #' capitalises characters in the column #' names of a data frame. #' @param data data.frame to alter column names +#' @param messiness Percentage of values to change per function. Must be +#' between 0 and 1. Default 0.1. #' @return data.frame with messy column names #' @export #' @examples #' messy_colnames(mtcars) -messy_colnames <- function(data) { +messy_colnames <- function(data, messiness = 0.2) { + new_names <- data.frame(x = names(data)) |> + add_special_chars(messiness = messiness) |> + change_case(messiness = messiness) |> + add_whitespace(messiness = messiness) |> + dplyr::pull(x) # Assign the new column names to the dataframe - names(data) <- special_chars(names(data)) + names(data) <- new_names return(data) } diff --git a/README.md b/README.md index e824baa..08c5afd 100644 --- a/README.md +++ b/README.md @@ -192,6 +192,29 @@ make_missing(ToothGrowth[1:10,], cols = "supp", missing = "999") 10 7.0 VC 0.5 ``` +### `messy_colnames()` + +Create messy column names: + +```r +set.seed(1234) +messy_colnames(ToothGrowth[1:10,]) +``` + +```r + )len s(upp dose +1 4.2 VC 0.5 +2 11.5 VC 0.5 +3 7.3 VC 0.5 +4 5.8 VC 0.5 +5 6.4 VC 0.5 +6 10.0 VC 0.5 +7 11.2 VC 0.5 +8 11.2 VC 0.5 +9 5.2 VC 0.5 +10 7.0 VC 0.5 +``` + ### Combining functions You can pipe together multiple functions to create custom messy transformations: diff --git a/man/messy_colnames.Rd b/man/messy_colnames.Rd index b482524..4727ba1 100644 --- a/man/messy_colnames.Rd +++ b/man/messy_colnames.Rd @@ -4,10 +4,13 @@ \alias{messy_colnames} \title{Make column names messy} \usage{ -messy_colnames(data) +messy_colnames(data, messiness = 0.2) } \arguments{ \item{data}{data.frame to alter column names} + +\item{messiness}{Percentage of values to change per function. Must be +between 0 and 1. Default 0.1.} } \value{ data.frame with messy column names From 210b1b6b63886e925e344f98ad79e99f5c8452dc Mon Sep 17 00:00:00 2001 From: nrennie Date: Sun, 17 Nov 2024 15:37:08 +0000 Subject: [PATCH 12/16] use testthat --- tests/testthat.R | 12 ++++++++++++ tests/testthat/test-dimension.R | 3 +++ 2 files changed, 15 insertions(+) create mode 100644 tests/testthat.R create mode 100644 tests/testthat/test-dimension.R diff --git a/tests/testthat.R b/tests/testthat.R new file mode 100644 index 0000000..2e38bf6 --- /dev/null +++ b/tests/testthat.R @@ -0,0 +1,12 @@ +# This file is part of the standard setup for testthat. +# It is recommended that you do not modify it. +# +# Where should you do additional test configuration? +# Learn more about the roles of various files in: +# * https://r-pkgs.org/testing-design.html#sec-tests-files-overview +# * https://testthat.r-lib.org/articles/special-files.html + +library(testthat) +library(messy) + +test_check("messy") diff --git a/tests/testthat/test-dimension.R b/tests/testthat/test-dimension.R new file mode 100644 index 0000000..8849056 --- /dev/null +++ b/tests/testthat/test-dimension.R @@ -0,0 +1,3 @@ +test_that("multiplication works", { + expect_equal(2 * 2, 4) +}) From 300aefccd99ba254ed221c34ce5964e437d5c5b0 Mon Sep 17 00:00:00 2001 From: nrennie Date: Sun, 17 Nov 2024 15:45:38 +0000 Subject: [PATCH 13/16] fix change_case --- R/change_case.R | 67 ++++++++++++++++++++++++++++++++++++++-------- R/messy_colnames.R | 2 +- README.md | 49 +++++++++++++++++++++++++++++++++ 3 files changed, 106 insertions(+), 12 deletions(-) diff --git a/R/change_case.R b/R/change_case.R index fcfacaf..07deabd 100644 --- a/R/change_case.R +++ b/R/change_case.R @@ -25,17 +25,29 @@ change_case <- function(data, } if (case_type == "letter") { - - # # Randomly change the case of each character using sapply - # chars <- sapply(chars, function(char) { - # if (stats::runif(1) < 0.5) { - # return(toupper(char)) - # } else { - # return(tolower(char)) - # } - # }) - - + if (is.null(cols)) { + output <- data |> + dplyr::mutate( + dplyr::across( + dplyr::where(~ is.character(.x) | is.factor(.x)), + ~ change_letter_case(.x, messiness = messiness) + ) + ) + } else { + # check if all cols present in colnames + if (!all((cols %in% colnames(data)))) { + stop("All elements of 'cols' must be a column name in 'data'") + } else { + output <- data |> + dplyr::mutate( + dplyr::across( + dplyr::all_of(cols) & + dplyr::where(~ is.character(.x) | is.factor(.x)), + ~ change_letter_case(.x, messiness = messiness) + ) + ) + } + } } else { if (is.null(cols)) { output <- data |> @@ -83,3 +95,36 @@ change_case <- function(data, } +#' Function to change case of each individual letter +#' +#' @param x Character vector +#' @param messiness Percentage of values to change. Must be +#' between 0 and 1. Default 0.1. +#' @return Messy character vector +#' @noRd +change_letter_case <- function(x, messiness = 0.1) { + # if factor, convert to character + if (is.factor(x)) { + x <- as.character(x) + } + + change_letter_case_string <- function(s, ...) { + # Convert to vector of characters + chars <- strsplit(s, NULL)[[1]] + + # Randomly change the case of each character using sapply + chars <- sapply(chars, function(char) { + if (stats::runif(1) < messiness) { + return(toupper(char)) + } else { + return(tolower(char)) + } + }) + + # Reassemble the string + return(paste(chars, collapse = "")) + } + + x_messy <- sapply(x, change_letter_case_string, USE.NAMES = FALSE) + return(x_messy) +} diff --git a/R/messy_colnames.R b/R/messy_colnames.R index f8f59b1..84760a5 100644 --- a/R/messy_colnames.R +++ b/R/messy_colnames.R @@ -15,7 +15,7 @@ messy_colnames <- function(data, messiness = 0.2) { add_special_chars(messiness = messiness) |> change_case(messiness = messiness) |> add_whitespace(messiness = messiness) |> - dplyr::pull(x) + dplyr::pull(.data$x) # Assign the new column names to the dataframe names(data) <- new_names return(data) diff --git a/README.md b/README.md index 08c5afd..2a11706 100644 --- a/README.md +++ b/README.md @@ -125,6 +125,27 @@ change_case(ToothGrowth[1:10,], messiness = 0.5) 10 7.0 VC 0.5 ``` +By default, the case of the entire string is changes. Alternatively, you can specify to change the case of each individual letter: + +```r +set.seed(1234) +change_case(ToothGrowth[1:10,], messiness = 0.5, case_type = "letter") +``` + +```r + len supp dose +1 4.2 VC 0.5 +2 11.5 VC 0.5 +3 7.3 vC 0.5 +4 5.8 VC 0.5 +5 6.4 VC 0.5 +6 10.0 VC 0.5 +7 11.2 Vc 0.5 +8 11.2 Vc 0.5 +9 5.2 VC 0.5 +10 7.0 VC 0.5 +``` + ### `add_special_chars()` Randomly add special characters to character strings: @@ -241,3 +262,31 @@ ToothGrowth[1:10,] |> 9 5.2 !VC 0.5 10 7.0 VC* 0.5 ``` + +If you're adding `messy_colnames()` to a chain (and you specify only some columns in other functions), make sure `messy_colnames()` comes at the end: + +```r +set.seed(1234) +ToothGrowth[1:10,] |> + make_missing(cols = "supp", missing = " ") |> + make_missing(cols = c("len", "dose"), missing = c(NA, 999)) |> + add_whitespace(cols = "supp", messiness = 0.5) |> + add_special_chars(cols = "supp") |> + messy_colnames() +``` + +```r + !l_e)n S^UPP d^o)se +1 4.2 VC 0.5 +2 11.5 VC NA +3 7.3 VC 0.5 +4 5.8 *VC 0.5 +5 6.4 VC 0.5 +6 10.0 VC 0.5 +7 11.2 0.5 +8 11.2 V#C NA +9 5.2 !VC 0.5 +10 7.0 VC* 0.5 +``` + +Otherwise, the column names you try to select may no longer exist! From e9811a6757e969777a09d7050b8839907c17dd41 Mon Sep 17 00:00:00 2001 From: nrennie Date: Sun, 17 Nov 2024 15:47:08 +0000 Subject: [PATCH 14/16] add dimension test --- tests/testthat/test-dimension.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/testthat/test-dimension.R b/tests/testthat/test-dimension.R index 8849056..c38e1e5 100644 --- a/tests/testthat/test-dimension.R +++ b/tests/testthat/test-dimension.R @@ -1,3 +1,3 @@ -test_that("multiplication works", { - expect_equal(2 * 2, 4) +test_that("Dimensions unchanged", { + expect_equal(dim(mtcars), dim(messy(mtcars))) }) From 4cb3e72db61fd5c4d5c3dc7b7399fdba2b16eb68 Mon Sep 17 00:00:00 2001 From: nrennie Date: Sun, 17 Nov 2024 15:52:24 +0000 Subject: [PATCH 15/16] add examples for all funcs --- DESCRIPTION | 2 +- R/add_whitespace.R | 2 ++ R/change_case.R | 2 ++ R/make_missing.R | 2 ++ R/messy.R | 2 ++ man/add_whitespace.Rd | 3 +++ man/change_case.Rd | 3 +++ man/make_missing.Rd | 3 +++ man/messy.Rd | 3 +++ 9 files changed, 21 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index c0b267f..457c809 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -22,5 +22,5 @@ Encoding: UTF-8 Roxygen: list(markdown = TRUE) RoxygenNote: 7.3.2 Config/Needs/website: nrennie/nrenniepkgdown -URL: http://nrennie.rbind.io/messy, https://github.com/nrennie/messy +URL: https://nrennie.rbind.io/messy, https://github.com/nrennie/messy BugReports: https://github.com/nrennie/messy/issues diff --git a/R/add_whitespace.R b/R/add_whitespace.R index af5f32c..64b877c 100644 --- a/R/add_whitespace.R +++ b/R/add_whitespace.R @@ -9,6 +9,8 @@ #' between 0 and 1. Default 0.1. #' @return a dataframe the same size as the input data. #' @export +#' @examples +#' add_whitespace(mtcars) add_whitespace <- function(data, cols = NULL, messiness = 0.1) { if (messiness < 0 || messiness > 1) { diff --git a/R/change_case.R b/R/change_case.R index 07deabd..2ddaaa2 100644 --- a/R/change_case.R +++ b/R/change_case.R @@ -12,6 +12,8 @@ #' @importFrom rlang .data #' @return a dataframe the same size as the input data. #' @export +#' @examples +#' change_case(mtcars) change_case <- function(data, cols = NULL, diff --git a/R/make_missing.R b/R/make_missing.R index 2f1fbd9..d860b5d 100644 --- a/R/make_missing.R +++ b/R/make_missing.R @@ -13,6 +13,8 @@ #' Default `NA`. #' @return a dataframe the same size as the input data. #' @export +#' @examples +#' make_missing(mtcars) make_missing <- function(data, cols = NULL, diff --git a/R/messy.R b/R/messy.R index e0b9f6e..354e988 100644 --- a/R/messy.R +++ b/R/messy.R @@ -12,6 +12,8 @@ #' the `"word"` or `"letter"`. #' @return a dataframe the same size as the input data. #' @export +#' @examples +#' messy(mtcars) messy <- function(data, messiness = 0.1, diff --git a/man/add_whitespace.Rd b/man/add_whitespace.Rd index 4adaded..fe9706e 100644 --- a/man/add_whitespace.Rd +++ b/man/add_whitespace.Rd @@ -22,3 +22,6 @@ a dataframe the same size as the input data. Randomly add whitespaces to the end of some values in all or a subset of columns. } +\examples{ +add_whitespace(mtcars) +} diff --git a/man/change_case.Rd b/man/change_case.Rd index 3752fa9..fbfd031 100644 --- a/man/change_case.Rd +++ b/man/change_case.Rd @@ -25,3 +25,6 @@ a dataframe the same size as the input data. Randomly switch between title case and lowercase for character strings } +\examples{ +change_case(mtcars) +} diff --git a/man/make_missing.Rd b/man/make_missing.Rd index ccdbb87..1f2dc33 100644 --- a/man/make_missing.Rd +++ b/man/make_missing.Rd @@ -27,3 +27,6 @@ a dataframe the same size as the input data. Randomly make values missing in all data columns, or a subset of columns } +\examples{ +make_missing(mtcars) +} diff --git a/man/messy.Rd b/man/messy.Rd index ae5c341..1c8c2f5 100644 --- a/man/messy.Rd +++ b/man/messy.Rd @@ -26,3 +26,6 @@ a dataframe the same size as the input data. \description{ Make a data frame messier. } +\examples{ +messy(mtcars) +} From d5e65b7e15301fbfef396bd809b017095501bd43 Mon Sep 17 00:00:00 2001 From: nrennie Date: Sun, 17 Nov 2024 15:54:20 +0000 Subject: [PATCH 16/16] bump version --- DESCRIPTION | 2 +- NEWS.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 457c809..fd7de18 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: messy Title: Create messy data from clean dataframes -Version: 0.0.1001 +Version: 0.0.2 Authors@R: c( person(given = "Nicola", family = "Rennie", role = c("aut", "cre", "cph"), email = "nrennie35@gmail.com", comment = c(ORCID = "0000-0003-4797-557X"))) diff --git a/NEWS.md b/NEWS.md index 52a3189..46c0b59 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,4 +1,4 @@ -# messy 0.0.1001+ +# messy 0.0.2 * Add pkgdown site * Add lintr file