tests/testthat/test-univar.R

t1 <- univar(mtcars,
  colvar = "gear",
  rowvar = "wt"
)

t2 <- univar(mtcars,
  colvar = "gear",
  rowvar = "wt",
  decimal = 1,
  precisionon = "wt",
  statlist = statlist(c(
    "N", "SUM", "MEAN", "GeoMEAN", "SD", "SE", "CV", "GSD", "GSE",
    "MEANSD", "MEANSE", "MEDIAN", "MIN", "MAX", "RANGE", "Q1", "Q3",
    "IQRANGE", "MEDRANGE", "MEDIQRANGE", "MEAN_CI", "GeoMEAN_CI"
  ))
)
t3 <- univar(mtcars,
  colvar = "gear",
  rowvar = "wt",
  tablebyvar = "vs",
  statlist = statlist(c(
    "N", "SUM", "MEAN", "GeoMEAN", "SD", "SE", "CV", "GSD", "GSE",
    "MEANSD", "MEANSE", "MEDIAN", "MIN", "MAX", "RANGE", "Q1", "Q3",
    "IQRANGE", "MEDRANGE", "MEDIQRANGE", "MEAN_CI", "GeoMEAN_CI"
  )),
  precisionby = c("vs"),
  decimal = 3
)

t4 <- univar(mtcars,
  colvar = "gear",
  rowvar = "wt",
  rowbyvar = "am",
  statlist = statlist(c(
    "N", "SUM", "MEAN", "GeoMEAN", "SD", "SE", "CV", "GSD", "GSE",
    "MEANSD", "MEANSE", "MEDIAN", "MIN", "MAX", "RANGE", "Q1", "Q3",
    "IQRANGE", "MEDRANGE", "MEDIQRANGE", "MEAN_CI", "GeoMEAN_CI"
  ))
)

t5 <- univar(mtcars,
  colvar = "gear",
  rowvar = "wt",
  rowbyvar = "am",
  tablebyvar = "vs",
  statlist = statlist(c(
    "N", "SUM", "MEAN", "GeoMEAN", "SD", "SE", "CV", "GSD", "GSE",
    "MEANSD", "MEANSE", "MEDIAN", "MIN", "MAX", "RANGE", "Q1", "Q3",
    "IQRANGE", "MEDRANGE", "MEDIQRANGE", "MEAN_CI", "GeoMEAN_CI"
  ))
)

t6 <- univar(mtcars,
  colvar = "gear",
  rowvar = "wt",
  wide = TRUE
)

t7 <- univar(mtcars,
  colvar = "gear",
  rowvar = "wt",
  statlist = statlist(c("N", "SUM", "MEAN")),
  wide = TRUE
)

t8 <- univar(mtcars,
  colvar = "gear",
  rowvar = "wt",
  tablebyvar = "vs",
  wide = TRUE
)

t9 <- univar(mtcars,
  colvar = "gear",
  rowvar = "wt",
  rowbyvar = "am",
  wide = TRUE
)

t10 <- univar(mtcars,
  colvar = "gear",
  rowvar = "wt",
  rowbyvar = "am",
  tablebyvar = "vs",
  wide = TRUE
)

test_that("univar outputs are named as expected", {
  expect_setequal(names(t1), c("label", "row_type", "3", "4", "5", "group_level"))

  expect_setequal(names(t2), c("label", "row_type", "3", "4", "5", "group_level"))

  expect_setequal(names(t3), c("vs", "label", "row_type", "3", "4", "5", "group_level"))

  expect_setequal(names(t4), c("label", "3", "4", "5", "row_type", "am", "group_level"))

  expect_setequal(names(t5), c("vs", "label", "row_type", "3", "4", "5", "am", "group_level"))

  expect_setequal(names(t6), c("gear", "Mean (SD)", "Range", "IQ range", "Median", "N", "row_type", "group_level"))

  expect_setequal(names(t7), c("gear", "Mean", "N", "Sum", "row_type", "group_level"))

  expect_setequal(names(t8), c("gear", "vs", "Mean (SD)", "Range", "IQ range", "Median", "N", "row_type", "group_level"))

  expect_setequal(names(t9), c("gear", "am", "Mean (SD)", "Range", "IQ range", "Median", "N", "row_type", "group_level"))

  expect_setequal(names(t10), c("vs", "gear", "am", "Mean (SD)", "Range", "IQ range", "Median", "N", "row_type", "group_level"))
})


test_that("univar computes statistics as expected", {
  expect_equal(t2, tibble::tribble(
    ~label, ~`3`, ~`4`, ~`5`, ~row_type, ~group_level,
    "N", "15", "12", "5", "N", 0,
    "Sum", "58.4", "31.4", "13.2", "VALUE", 0,
    "Mean", "3.89", "2.62", "2.63", "VALUE", 0,
    "Geometric Mean", "3.81", "2.54", "2.52", "VALUE", 0,
    "Std. Dev.", "0.833", "0.633", "0.819", "VALUE", 0,
    "Std. Error", "0.215", "0.183", "0.366", "VALUE", 0,
    "CV (%)", "21.40", "24.18", "31.11", "VALUE", 0,
    "Geometric Std. Dev.", "1.231", "1.292", "1.409", "VALUE", 0,
    "Geometric Std. Error", "1.055", "1.077", "1.166", "VALUE", 0,
    "Mean (SD)", "3.89 (0.833)", "2.62 (0.633)", "2.63 (0.819)", "VALUE", 0,
    "Mean (SE)", "3.89 (0.215)", "2.62 (0.183)", "2.63 (0.366)", "VALUE", 0,
    "Median", "3.73", "2.70", "2.77", "VALUE", 0,
    "Minimum", "2.5", "1.6", "1.5", "VALUE", 0,
    "Maximum", "5.4", "3.4", "3.6", "VALUE", 0,
    "Range", "(2.5; 5.4)", "(1.6; 3.4)", "(1.5; 3.6)", "VALUE", 0,
    "First quartile", "3.44", "2.07", "2.14", "VALUE", 0,
    "Third quartile", "4.07", "3.17", "3.17", "VALUE", 0,
    "IQ range", "(3.44; 4.07)", "(2.07; 3.17)", "(2.14; 3.17)", "VALUE", 0,
    "Median (Range)", "3.73 (2.5; 5.4)", "2.70 (1.6; 3.4)", "2.77 (1.5; 3.6)", "VALUE", 0,
    "Median (Q1; Q3)", "3.73 (3.44; 4.07)", "2.70 (2.07; 3.17)", "2.77 (2.14; 3.17)", "VALUE", 0,
    "Mean (95% C.I.)", "3.89 (3.431; 4.354)", "2.62 (2.215; 3.019)", "2.63 (1.616; 3.649)", "VALUE", 0,
    "Geometric Mean (95% C.I.)", "3.81 (3.399; 4.280)", "2.54 (2.161; 2.991)", "2.52 (1.646; 3.856)", "VALUE", 0,
  ), ignore_attr = TRUE)
})

test_that("rowtext works as expected with univar", {
  expected <- tibble::tribble(
    ~label, ~X3, ~X4, ~X5, ~row_type, ~group_level,
    "Mpg Details", "", "", "", "HEADER", 0,
    "N", "15", "12", "5", "N", 0,
    "Mean (SD)", "16.11 (3.372)", "24.53 (5.277)", "21.38 (6.659)", "VALUE", 0,
    "Median", "15.50", "22.80", "19.70", "VALUE", 0,
    "Range", "(10.4; 21.5)", "(17.8; 33.9)", "(15.0; 30.4)", "VALUE", 0,
    "IQ range", "(14.30; 18.70)", "(21.00; 28.85)", "(15.80; 26.00)", "VALUE", 0
  )

  expect_equal(
    mtcars %>%
      univar(
        colvar = "gear",
        row_header = "Mpg Details",
        rowvar = "mpg"
      ),
    expected,
    ignore_attr = TRUE
  )

  expected <- tibble::tribble(
    ~am,        ~label,              ~X3,              ~X4,              ~X5,    ~row_type, ~group_level,
    "0",           "0",               "",               "",               "", "BY_HEADER1",            0,
    "0", "Mpg Details",               "",               "",               "",     "HEADER",            0,
    "0",           "N",             "15",              "4",              "0",          "N",            0,
    "0",   "Mean (SD)",  "16.11 (3.372)",  "21.05 (3.070)",              "-",      "VALUE",            0,
    "0",      "Median",          "15.50",          "21.00",              "-",      "VALUE",            0,
    "0",       "Range",   "(10.4; 21.5)",   "(17.8; 24.4)",         "(-; -)",      "VALUE",            0,
    "0",    "IQ range", "(14.30; 18.70)", "(18.50; 23.60)",         "(-; -)",      "VALUE",            0,
    "1",           "1",               "",               "",               "", "BY_HEADER1",            0,
    "1", "Mpg Details",               "",               "",               "",     "HEADER",            0,
    "1",           "N",              "0",              "8",              "5",          "N",            0,
    "1",   "Mean (SD)",              "-",  "26.28 (5.414)",  "21.38 (6.659)",      "VALUE",            0,
    "1",      "Median",              "-",          "25.05",          "19.70",      "VALUE",            0,
    "1",       "Range",         "(-; -)",   "(21.0; 33.9)",   "(15.0; 30.4)",      "VALUE",            0,
    "1",    "IQ range",         "(-; -)", "(21.20; 31.40)", "(15.80; 26.00)",      "VALUE",            0
  )

  expect_equal(
    mtcars %>%
      univar(
        colvar = "gear",
        row_header = "Mpg Details",
        rowvar = "mpg",
        rowbyvar = "am"
      ),
    expected,
    ignore_attr = TRUE
  )

  expected <- tibble::tribble(
    ~label, ~X3, ~X4, ~X5, ~row_type, ~group_level,
    "Mpg mean", "16.11", "24.53", "21.38", "VALUE", 0
  )

  expect_equal(
    mtcars %>%
      univar(
        colvar = "gear",
        rowtext = "Mpg mean",
        rowvar = "mpg",
        statlist = statlist("MEAN")
      ),
    expected,
    ignore_attr = TRUE
  )
})

test_that("univar can handle sparse data as expected", {
  mtcars2 <- mtcars %>%
    rownames_to_column(var = "USUBJID") %>%
    mutate(across(.col = -any_of("mpg"), .fns = as.factor)) %>%
    filter(FALSE)

  expected <- tibble::tribble(
    ~label, ~X4, ~X6, ~X8, ~row_type, ~group_level,
    "N", "0", "0", "0", "N", 0,
    "Mean (SD)", "-", "-", "-", "VALUE", 0,
    "Median", "-", "-", "-", "VALUE", 0,
    "Range", "(-; -)", "(-; -)", "(-; -)", "VALUE", 0,
    "IQ range", "(-; -)", "(-; -)", "(-; -)", "VALUE", 0
  )

  expect_equal(
    univar(
      mtcars2,
      colvar = "cyl",
      rowvar = "mpg"
    ),
    expected,
    ignore_attr = TRUE
  )
})

test_that("MEANSE statlist works as expected", {
  t1 <- mtcars %>%
    univar(
      colvar = "cyl",
      rowvar = "mpg",
      statlist = statlist(c("MEANSE"))
    )
  expected <- tibble::tribble(
    ~label, ~X4, ~X6, ~X8, ~row_type, ~group_level,
    "Mean (SE)", "26.66 (1.360)", "19.74 (0.549)", "15.10 (0.684)", "VALUE", 0
  )

  expect_equal(t1, expected, ignore_attr = TRUE)
})

Try the tidytlg package in your browser

Any scripts or data that you put into this service are public.

tidytlg documentation built on July 2, 2025, 5:09 p.m.