---
title: "Getting started"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{getting_started}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
```
## Introduction
The `kpiwidget` package provides an easy way to create KPI (Key Performance Indicator) widgets for dashboards using `crosstalk` shared data. This vignette demonstrates different options and functionalities available in `kpiwidget`.
## Installation
Before using `kpiwidget`, ensure that it is installed along with `crosstalk`:
```{r}
# install.packages("crosstalk")
# Install kpiwidget from CRAN or GitHub
# install.packages("kpiwidget")
# devtools::install_github("your_github/kpiwidget")
```
## Loading Required Libraries
```{r setup}
library(kpiwidget)
library(crosstalk)
library(DT)
library(dplyr)
library(htmltools)
```
## Creating a Shared Data Object
To enable interactivity, we first wrap our dataset in `SharedData` from `crosstalk`. This allows filtering across multiple widgets using the same dataset.
```{r}
# Create a shared data object with row numbers as keys
df_shared <- crosstalk::SharedData$new(mtcars, key = ~ 1:nrow(mtcars), group = "mtcars_group")
```
## Adding Filters
`crosstalk` allows dynamic filtering of data. Here, we add a filter to select vehicles based on the number of gears:
```{r}
crosstalk::filter_checkbox("gear", "Gear", df_shared, ~gear, inline = TRUE)
```
## Using `kpiwidget`
The `kpiwidget` function provides a simple way to display key performance indicators. The `column` parameter is required, and by default, it calculates the count (number of rows in the dataset).
```{r}
kpiwidget(
data = df_shared,
column = "mpg",
height = "25px"
)
```
### Parameters
* data - A crosstalk::SharedData object.
* kpi - A character string specifying the metric to compute. Options: count, distinctCount, duplicates, sum, mean, min, max. Default is count.
* comparison - A character string indicating a comparison mode. Options are ratio or share. Default is NULL.
* column - A column name (as a string) to be used for numeric aggregation. Default is NULL, this parameter is REQUIRED.
* selection - A one-sided formula. Serves as a global filter. Default is NULL.
* group1 - For comparison mode: a one-sided formula defining group 1. This is required in comparison mode. Default is NULL.
* group2 - For comparison mode: a one-sided formula defining group 2. For comparison = "ratio", if not provided, it defaults to the complement of group1. For comparison = "share", if not provided, it defaults to all rows. Default is NULL.
* decimals - Number of decimals to round the computed result. Default is 1.
* big_mark - Character to be used as the thousands separator. Default is " ".
* prefix - A string to be prepended to the displayed value. Default is NULL.
* suffix - A string to be appended to the displayed value. Default is NULL.
* width - Widget width (passed to htmlwidgets::createWidget). Default is NULL.
* height - Widget height (passed to htmlwidgets::createWidget). Default is NULL.
* elementId - Optional element ID for the widget. Default is NULL.
* group - Crosstalk group name. Typically provided by the SharedData object. Default is NULL.
## KPI Options
The `kpi` parameter allows different types of calculations. Below, we demonstrate various options available in `kpiwidget`.
### Sum
Calculates the sum of the selected column.
```{r}
kpiwidget(
data = df_shared,
column = "mpg",
kpi = "sum",
height = "25px"
)
```
### Mean
Computes the average (mean) of the selected column.
```{r}
kpiwidget(
data = df_shared,
column = "mpg",
kpi = "mean",
height = "25px"
)
```
### Minimum
Finds the minimum value in the selected column.
```{r}
kpiwidget(
data = df_shared,
column = "mpg",
kpi = "min",
height = "25px"
)
```
### Maximum
Finds the maximum value in the selected column.
```{r}
kpiwidget(
data = df_shared,
column = "mpg",
kpi = "max",
height = "25px"
)
```
### Count
Counts the number of rows in the dataset.
```{r}
kpiwidget(
data = df_shared,
column = "mpg",
kpi = "count",
height = "25px"
)
```
### Distinct Count
Counts the number of unique values in the selected column.
```{r}
kpiwidget(
data = df_shared,
column = "cyl",
kpi = "distinctCount",
height = "25px"
)
```
## Comparison Options
### Ratio
Calculates the ratio of a subset defined with `group1` parameter (e.g., cars with 4 cylinders) compared to the complement of group1 filter (default setting for "ratio") or to the subset defined with `group2` parameter.
default:
```{r}
kpiwidget(
data = df_shared,
column = "mpg",
kpi = "mean",
comparison = "ratio",
group1 = ~ cyl == 4,
height = "25px"
)
```
group2:
```{r}
kpiwidget(
data = df_shared,
column = "mpg",
kpi = "mean",
comparison = "ratio",
group1 = ~ cyl == 4,
group2 = ~ cyl == 6,
height = "25px"
)
```
### Share
Computes the share between two groups (e.g., cars with 4 cylinders and full dataset or subset defined with `group2` pamarater).
default:
```{r}
kpiwidget(
data = df_shared,
column = "mpg",
kpi = "count",
comparison = "share",
group1 = ~ cyl == 4,
height = "25px"
)
```
group2:
```{r}
kpiwidget(
data = df_shared,
column = "mpg",
kpi = "count",
comparison = "share",
group1 = ~ cyl == 4,
group2 = ~ cyl %in% c(4, 6),
height = "25px"
)
```
using selection:
```{r}
kpiwidget(
data = df_shared,
column = "mpg",
kpi = "count",
selection = ~ cyl %in% c(4, 6),
comparison = "share",
group1 = ~ cyl == 4,
height = "25px"
)
```
## Formatting Options
### Decimals
```{r}
kpiwidget(
data = df_shared,
column = "mpg",
kpi = "mean",
decimals = 3,
height = "25px"
)
```
### Big Mark
```{r}
kpiwidget(
data = df_shared,
column = "disp",
kpi = "sum",
big_mark = " ,",
height = "25px"
)
```
### Prefix
```{r}
kpiwidget(
data = df_shared,
column = "mpg",
kpi = "mean",
prefix = "mean mpg: ",
height = "25px"
)
```
### Suffix
```{r}
kpiwidget(
data = df_shared,
column = "mpg",
kpi = "count",
comparison = "share",
group1 = ~ cyl == 4,
suffix = " %",
height = "25px"
)
```
## Bringing It All Together
```{r example, echo=FALSE}
crosstalk::filter_slider("wt", "Weight", df_shared, ~wt, width = "100%")
DT::datatable(df_shared,
extensions = "Scroller",
style = "bootstrap",
class = "compact",
width = "100%",
options = list(deferRender = TRUE,
scrollY = 300,
scroller = TRUE)
)
```
There are 32 records in unfiltered dataset. `r kpiwidget(data = df_shared, kpi = "count", column = "mpg", decimals = 0, suffix = " car(s) are currently selected.")`
On average they have `r kpiwidget(data = df_shared, kpi = 'mean', column = 'hp', decimals = 0, suffix = " HP")`
and can drive `r kpiwidget(data = df_shared, column = "mpg", kpi = "mean", suffix = " mpg.")`
8 cylinder cars have `r kpiwidget(data = df_shared, column = "hp", kpi = "mean", comparison = "ratio", group1 = ~ cyl == 8)` times more HP than the rest of cars in selection.
## Conclusion
The `kpiwidget` package provides a flexible way to display KPIs in interactive dashboards. Using `crosstalk`, it enables real-time filtering and comparison of data.