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 June 22, 2024, 10:43 a.m.