| Title: | Preliminary Visualisation of Data | 
| Version: | 0.6.0 | 
| Description: | Create preliminary exploratory data visualisations of an entire dataset to identify problems or unexpected features using 'ggplot2'. | 
| Depends: | R (≥ 3.2.2) | 
| License: | MIT + file LICENSE | 
| LazyData: | true | 
| RoxygenNote: | 7.2.3 | 
| Imports: | ggplot2, tidyr, dplyr, purrr, readr, magrittr, stats, tibble, glue, forcats, cli, scales | 
| URL: | https://docs.ropensci.org/visdat/, https://github.com/ropensci/visdat | 
| BugReports: | https://github.com/ropensci/visdat/issues | 
| Suggests: | testthat (≥ 3.0.0), plotly (≥ 4.5.6), knitr, rmarkdown, vdiffr, spelling, covr, stringr | 
| VignetteBuilder: | knitr | 
| Encoding: | UTF-8 | 
| Language: | en-US | 
| Config/testthat/edition: | 3 | 
| NeedsCompilation: | no | 
| Packaged: | 2023-02-02 00:52:14 UTC; nick | 
| Author: | Nicholas Tierney  | 
| Maintainer: | Nicholas Tierney <nicholas.tierney@gmail.com> | 
| Repository: | CRAN | 
| Date/Publication: | 2023-02-02 03:10:02 UTC | 
visdat
Description
visdat is a package that helps with the preliminary visualisation of data. visdat makes it easy to visualise your whole dataset so that you can visually identify problems.
Author(s)
Maintainer: Nicholas Tierney nicholas.tierney@gmail.com (ORCID)
Other contributors:
Sean Hughes (ORCID) (Sean Hughes reviewed the package for rOpenSci, see https://github.com/ropensci/onboarding/issues/87) [reviewer]
Mara Averick (Mara Averick reviewed the package for rOpenSci, see https://github.com/ropensci/onboarding/issues/87) [reviewer]
Stuart Lee [contributor]
Earo Wang [contributor]
Nic Crane [contributor]
Christophe Regouby [contributor]
See Also
It's main functions are:
Learn more about visdat at https://docs.ropensci.org/visdat/
Pipe operator
Description
See magrittr::%>% for details.
Usage
lhs %>% rhs
Arguments
lhs | 
 A value or the magrittr placeholder.  | 
rhs | 
 A function call using the magrittr semantics.  | 
Value
The result of calling rhs(lhs).
Abbreviate all variables in a data frame
Description
It can be useful to abbreviate variable names in a data set to make them easier to plot. This function takes in a data set and some minimum length to abbreviate the data to.
Usage
abbreviate_vars(data, min_length = 10)
Arguments
data | 
 data.frame  | 
min_length | 
 minimum number of characters to abbreviate down to  | 
Value
data frame with abbreviated variable names
Examples
long_data <- data.frame(
  really_really_long_name = c(NA, NA, 1:8),
  very_quite_long_name = c(-1:-8, NA, NA),
  this_long_name_is_something_else = c(NA, NA,
                                       seq(from = 0, to = 1, length.out = 8))
)
vis_miss(long_data)
long_data %>% abbreviate_vars() %>% vis_miss()
A small toy dataset of binary data with missings.
Description
A dataset containing binary values and missing values. It is created to
illustrate the usage of vis_binary().
Usage
dat_bin
Format
A data frame with 100 rows and 3 variables:
- x
 a binary variable with missing values.
- y
 a binary variable with missing values.
- z
 a binary variable with no missing values.
Return data used to create vis_cor plot
Description
Return data used to create vis_cor plot
Create a tidy dataframe of correlations suitable for plotting
Usage
data_vis_cor(x, ...)
## Default S3 method:
data_vis_cor(x, ...)
## S3 method for class 'data.frame'
data_vis_cor(
  x,
  cor_method = "pearson",
  na_action = "pairwise.complete.obs",
  ...
)
## S3 method for class 'grouped_df'
data_vis_cor(x, ...)
Arguments
x | 
 data.frame  | 
... | 
 extra arguments (currently unused)  | 
cor_method | 
 correlation method to use, from   | 
na_action | 
 The method for computing covariances when there are missing
values present. This can be "everything", "all.obs", "complete.obs",
"na.or.complete", or "pairwise.complete.obs" (default). This option is
taken from the   | 
Value
data frame
tidy dataframe of correlations
Examples
data_vis_cor(airquality)
## Not run: 
#return vis_dat data for each group
library(dplyr)
airquality %>%
  group_by(Month) %>%
  data_vis_cor()
## End(Not run)
data_vis_cor(airquality)
Return data used to create vis_dat plot
Description
Return data used to create vis_dat plot
Usage
data_vis_dat(x, ...)
## Default S3 method:
data_vis_dat(x, ...)
## S3 method for class 'data.frame'
data_vis_dat(x, ...)
## S3 method for class 'grouped_df'
data_vis_dat(x, ...)
Arguments
x | 
 data.frame  | 
... | 
 extra arguments (currently unused)  | 
Value
data frame
Examples
data_vis_dat(airquality)
## Not run: 
#return vis_dat data for each group
library(dplyr)
airquality %>%
  group_by(Month) %>%
  data_vis_dat()
## End(Not run)
Return data used to create vis_miss plot
Description
Return data used to create vis_miss plot
Create a tidy dataframe of missing data suitable for plotting
Usage
data_vis_miss(x, ...)
## Default S3 method:
data_vis_miss(x, ...)
## S3 method for class 'data.frame'
data_vis_miss(x, cluster = FALSE, ...)
## S3 method for class 'grouped_df'
data_vis_miss(x, ...)
Arguments
x | 
 data.frame  | 
... | 
 extra arguments (currently unused)  | 
cluster | 
 logical - whether to cluster missingness. Default is FALSE.  | 
Value
data frame
tidy dataframe of missing data
Examples
data_vis_miss(airquality)
## Not run: 
#return vis_dat data for each group
library(dplyr)
airquality %>%
  group_by(Month) %>%
  data_vis_miss()
## End(Not run)
data_vis_miss(airquality)
A small toy dataset of imaginary people
Description
A dataset containing information about some randomly generated people,
created using the excellent wakefield package. It is created as
deliberately messy dataset.
Usage
typical_data
Format
A data frame with 5000 rows and 11 variables:
- ID
 Unique identifier for each individual, a sequential character vector of zero-padded identification numbers (IDs). see ?wakefield::id
- Race
 Race for each individual, "Black", "White", "Hispanic", "Asian", "Other", "Bi-Racial", "Native", and "Hawaiin", see ?wakefield::race
- Age
 Age of each individual, see ?wakefield::age
- Sex
 Male or female, see ?wakefield::sex
- Height(cm)
 Height in centimeters, see ?wakefield::height
- IQ
 vector of intelligence quotients (IQ), see ?wakefield::iq
- Smokes
 whether or not this person smokes, see ?wakefield::smokes
- Income
 Yearly income in dollars, see ?wakefield::income
- Died
 Whether or not this person has died yet., see ?wakefield::died
A small toy dataset of imaginary people
Description
A wider dataset than typical_data containing information about some
randomly generated people, created using the excellent wakefield
package. It is created as deliberately odd / eclectic dataset.
Usage
typical_data_large
Format
A data frame with 300 rows and 49 variables:
- Age
 Age of each individual, see ?wakefield::age for more info
- Animal
 A vector of animals, see ?wakefield::animal
- Answer
 A vector of "Yes" or "No"
- Area
 A vector of living areas "Suburban", "Urban", "Rural"
- Car
 names of cars - see ?mtcars
- Children
 vector of number of children - see ?wakefield::children
- Coin
 character vector of "heads" and "tails"
- Color
 vector of vectors from "colors()"
- Date
 vector of "important" dates for an individual
- Death
 TRUE / FALSE for whether this person died
- Dice
 6 sided dice result
- DNA
 vector of GATC nucleobases
- DOB
 birth dates
- Dummy
 a 0/1 dummy var
- Education
 education attainment level
- Employment
 employee status
- Eye
 eye colour
- Grade
 percent grades
- Grade_Level
 favorite school grade
- Group
 control or treatment
- hair
 hair colours - "brown", "black", "blonde", or "red"
- Height
 height in cm
- Income
 yearly income
- Browser
 choice of internet browser
- IQ
 intelligence quotient
- Language
 random language of the world
- Level
 levels between 1 and 4
- Likert
 likert response - "strongly agree", "agree", and so on
- Lorem_Ipsum
 lorem ipsum text
- Marital
 marital status- "married", "divorced", "widowed", "separated", etc
- Military
 miliary branch they are in
- Month
 their favorite month
- Name
 their name
- Normal
 a random normal number
- Political
 their favorite political party
- Race
 their race
- Religion
 their religion
- SAT
 their SAT score
- Sentence
 an uttered sentence
- Sex_1
 sex of their first child
- Sex_2
 sex of their second child
- Smokes
 do they smoke
- Speed
 their median speed travelled in a car
- State
 the last state they visited in the USA
- String
 a random string they smashed out on the keyboard
- Upper
 the last key they hit in upper case
- Valid
 TRUE FALSE answer to a question
- Year
 significant year to that individuals
- Zip
 a zip code they have visited
Visualise binary values
Description
Visualise binary values
Usage
vis_binary(
  data,
  col_zero = "salmon",
  col_one = "steelblue2",
  col_na = "grey90",
  order = NULL
)
Arguments
data | 
 a data.frame  | 
col_zero | 
 colour for zeroes, default is "salmon"  | 
col_one | 
 colour for ones, default is "steelblue2"  | 
col_na | 
 colour for NA, default is "grey90"  | 
order | 
 optional character vector of the order of variables  | 
Value
a ggplot plot of the binary values
Examples
vis_binary(dat_bin)
# changing order of variables
# create numeric names
df <-  setNames(dat_bin, c("1.1", "8.9", "10.4"))
df
# not ideal
vis_binary(df)
# good - specify the original order
vis_binary(df, order = names(df))
Visually compare two dataframes and see where they are different.
Description
vis_compare, like the other vis_* families, gives an at-a-glance ggplot
of a dataset, but in this case, hones in on visualising two different
dataframes of the same dimension, so it takes two dataframes as arguments.
Usage
vis_compare(df1, df2)
Arguments
df1 | 
 The first dataframe to compare  | 
df2 | 
 The second dataframe to compare to the first.  | 
Value
ggplot2 object displaying which values in each data frame are
present in each other, and which are not.
See Also
vis_miss() vis_dat() vis_guess() vis_expect() vis_cor()
Examples
# make a new dataset of iris that contains some NA values
aq_diff <- airquality
aq_diff[1:10, 1:2] <- NA
vis_compare(airquality, aq_diff)
Visualise correlations amongst variables in your data as a heatmap
Description
Visualise correlations amongst variables in your data as a heatmap
Usage
vis_cor(
  data,
  cor_method = "pearson",
  na_action = "pairwise.complete.obs",
  facet,
  ...
)
Arguments
data | 
 data.frame  | 
cor_method | 
 correlation method to use, from   | 
na_action | 
 The method for computing covariances when there are missing
values present. This can be "everything", "all.obs", "complete.obs",
"na.or.complete", or "pairwise.complete.obs" (default). This option is
taken from the   | 
facet | 
 bare unqouted variable to use for facetting  | 
... | 
 extra arguments you may want to pass to   | 
Value
ggplot2 object
Examples
vis_cor(airquality)
vis_cor(airquality, facet = Month)
vis_cor(mtcars)
## Not run: 
# this will error
vis_cor(iris)
## End(Not run)
Visualises a data.frame to tell you what it contains.
Description
vis_dat gives you an at-a-glance ggplot object of what is inside a
dataframe. Cells are coloured according to what class they are and whether
the values are missing. As vis_dat returns a ggplot object, it is very
easy to customize and change labels, and customize the plot
Usage
vis_dat(
  x,
  sort_type = TRUE,
  palette = "default",
  warn_large_data = TRUE,
  large_data_size = 9e+05,
  facet
)
Arguments
x | 
 a data.frame object  | 
sort_type | 
 logical TRUE/FALSE. When TRUE (default), it sorts by the type in the column to make it easier to see what is in the data  | 
palette | 
 character "default", "qual" or "cb_safe". "default" (the default) provides the stock ggplot scale for separating the colours. "qual" uses an experimental qualitative colour scheme for providing distinct colours for each Type. "cb_safe" is a set of colours that are appropriate for those with colourblindness. "qual" and "cb_safe" are drawn from http://colorbrewer2.org/.  | 
warn_large_data | 
 logical - warn if there is large data? Default is TRUE see note for more details  | 
large_data_size | 
 integer default is 900000 (given by 'nrow(data.frame) * ncol(data.frame)“). This can be changed. See note for more details.  | 
facet | 
 bare variable name for a variable you would like to facet
by. By default there is no facetting. Only one variable can be facetted.
You can get the data structure using   | 
Value
ggplot2 object displaying the type of values in the data frame and
the position of any missing values.
Note
Some datasets might be too large to plot, sometimes creating a blank plot - if this happens, I would recommend downsampling the data, either looking at the first 1,000 rows or by taking a random sample. This means that you won't get the same "look" at the data, but it is better than a blank plot! See example code for suggestions on doing this.
See Also
vis_miss() vis_guess() vis_expect() vis_cor()
vis_compare()
Examples
vis_dat(airquality)
# experimental colourblind safe palette
vis_dat(airquality, palette = "cb_safe")
vis_dat(airquality, palette = "qual")
# if you have a large dataset, you might want to try downsampling:
## Not run: 
library(nycflights13)
library(dplyr)
flights %>%
  sample_n(1000) %>%
  vis_dat()
flights %>%
  slice(1:1000) %>%
  vis_dat()
## End(Not run)
Visualise whether a value is in a data frame
Description
vis_expect visualises certain conditions or values in your data. For
example, If you are not sure whether to expect -1 in your data, you could
write: vis_expect(data, ~.x == -1), and you can see if there are times
where the values in your data are equal to -1. You could also, for example,
explore a set of bad strings, or possible NA values and visualise where
they are using vis_expect(data, ~.x %in% bad_strings) where
bad_strings is a character vector containing bad strings  like N A
N/A etc.
Usage
vis_expect(data, expectation, show_perc = TRUE)
Arguments
data | 
 a data.frame  | 
expectation | 
 a formula following the syntax:   | 
show_perc | 
 logical. TRUE now adds in the \ TRUE or FALSE in the whole dataset into the legend. Default value is TRUE.  | 
Value
a ggplot2 object
See Also
vis_miss() vis_dat() vis_guess() vis_cor() vis_compare()
Examples
dat_test <- tibble::tribble(
            ~x, ~y,
            -1,  "A",
            0,  "B",
            1,  "C",
            NA, NA
            )
vis_expect(dat_test, ~.x == -1)
vis_expect(airquality, ~.x == 5.1)
# explore some common NA strings
common_nas <- c(
"NA",
"N A",
"N/A",
"na",
"n a",
"n/a"
)
dat_ms <- tibble::tribble(~x,  ~y,    ~z,
                         "1",   "A",   -100,
                         "3",   "N/A", -99,
                         "NA",  NA,    -98,
                         "N A", "E",   -101,
                         "na", "F",   -1)
vis_expect(dat_ms, ~.x %in% common_nas)
Visualise type guess in a data.frame
Description
vis_guess visualises the class of every single individual cell in a
dataframe and displays it as ggplot object, similar to vis_dat. Cells
are coloured according to what class they are and whether the values are
missing. vis_guess estimates the class of individual elements using
readr::guess_parser.  It may be currently slow on larger datasets.
Usage
vis_guess(x, palette = "default")
Arguments
x | 
 a data.frame  | 
palette | 
 character "default", "qual" or "cb_safe". "default" (the default) provides the stock ggplot scale for separating the colours. "qual" uses an experimental qualitative colour scheme for providing distinct colours for each Type. "cb_safe" is a set of colours that are appropriate for those with colourblindness. "qual" and "cb_safe" are drawn from http://colorbrewer2.org/.  | 
Value
ggplot2 object displaying the guess of the type of values in the
data frame and the position of any missing values.
See Also
vis_miss() vis_dat() vis_expect() vis_cor() vis_compare()
Examples
messy_vector <- c(TRUE,
                 "TRUE",
                 "T",
                 "01/01/01",
                 "01/01/2001",
                 NA,
                 NaN,
                 "NA",
                 "Na",
                 "na",
                 "10",
                 10,
                 "10.1",
                 10.1,
                 "abc",
                 "$%TG")
set.seed(1114)
messy_df <- data.frame(var1 = messy_vector,
                       var2 = sample(messy_vector),
                       var3 = sample(messy_vector))
vis_guess(messy_df)
Visualise a data.frame to display missingness.
Description
vis_miss provides an at-a-glance ggplot of the missingness inside a
dataframe, colouring cells according to missingness, where black indicates
a missing cell and grey indicates a present cell. As it returns a ggplot
object, it is very easy to customize and change labels.
Usage
vis_miss(
  x,
  cluster = FALSE,
  sort_miss = FALSE,
  show_perc = TRUE,
  show_perc_col = TRUE,
  large_data_size = 9e+05,
  warn_large_data = TRUE,
  facet
)
Arguments
x | 
 a data.frame  | 
cluster | 
 logical. TRUE specifies that you want to use hierarchical clustering (mcquitty method) to arrange rows according to missingness. FALSE specifies that you want to leave it as is. Default value is FALSE.  | 
sort_miss | 
 logical. TRUE arranges the columns in order of missingness. Default value is FALSE.  | 
show_perc | 
 logical. TRUE now adds in the \ in the whole dataset into the legend. Default value is TRUE.  | 
show_perc_col | 
 logical. TRUE adds in the \
column into the x axis. Can be disabled with FALSE. Default value is TRUE.
No missingness percentage column information will be presented when   | 
large_data_size | 
 integer default is 900000 (given by 'nrow(data.frame) * ncol(data.frame)“). This can be changed. See note for more details.  | 
warn_large_data | 
 logical - warn if there is large data? Default is TRUE see note for more details  | 
facet | 
 (optional) bare variable name, if you want to create a faceted
plot, with one plot per level of the variable. No missingness percentage
column information will be presented when   | 
Details
The missingness summaries in the columns are rounded to the nearest integer.
For more detailed summaries, please see the summaries in the naniar R
package, specifically, naniar::miss_var_summary().
Value
ggplot2 object displaying the position of missing values in the
dataframe, and the percentage of values missing and present.
Note
Some datasets might be too large to plot, sometimes creating a blank plot - if this happens, I would recommend downsampling the data, either looking at the first 1,000 rows or by taking a random sample. This means that you won't get the same "look" at the data, but it is better than a blank plot! See example code for suggestions on doing this.
See Also
vis_dat() vis_guess() vis_expect() vis_cor() vis_compare()
Examples
vis_miss(airquality)
vis_miss(airquality, cluster = TRUE)
vis_miss(airquality, sort_miss = TRUE)
vis_miss(airquality, facet = Month)
## Not run: 
# if you have a large dataset, you might want to try downsampling:
library(nycflights13)
library(dplyr)
flights %>%
  sample_n(1000) %>%
  vis_miss()
flights %>%
  slice(1:1000) %>%
  vis_miss()
## End(Not run)
Visualise the value of data values
Description
Visualise all of the values in the data on a 0 to 1 scale. Only works on numeric data - see examples for how to subset to only numeric data.
Usage
vis_value(data, na_colour = "grey90", viridis_option = "D")
Arguments
data | 
 a data.frame  | 
na_colour | 
 a character vector of length one describing what colour you want the NA values to be. Default is "grey90"  | 
viridis_option | 
 A character string indicating the colormap option to use. Four options are available: "magma" (or "A"), "inferno" (or "B"), "plasma" (or "C"), "viridis" (or "D", the default option) and "cividis" (or "E").  | 
Value
a ggplot plot of the values
Examples
vis_value(airquality)
vis_value(airquality, viridis_option = "A")
vis_value(airquality, viridis_option = "B")
vis_value(airquality, viridis_option = "C")
vis_value(airquality, viridis_option = "E")
## Not run: 
library(dplyr)
diamonds %>%
  select_if(is.numeric) %>%
  vis_value()
## End(Not run)