How to Dynamically Change a Question Based on a Control Box
Control boxes are a popular way for users to change things on a Displayr page. This post will show you how to use a control box to dynamically apply weights and filters to tables and visualizations.
The two main types of control boxes are the combo and the list box. Typically they are used for changing how the data is filtered, as discussed in this post. But you can also use a control box to change the actual question in a table (or chart, visualization, etc.). You can also use control boxes to change the weighting you want to apply.
For example, the image below shows a question (Preferred Cola) that I've chosen to split by income brackets, using the selection in the control box.
If I change the control box option to Age, it becomes:
You can do this with an R variable. The R variable dynamically updates when the selection in the control box changes. The purpose of this post is to show, via example, how you can do this.
Setup your control box with your options
Use Insert > Control and then choose either a Combo or List box. Over in the Object Inspector, list your questions in CONTROL > Item List (which can be labeled however you like). In this example, I entered 4 possible options for a combo box:
I set the Selection mode to be "Single selection," and When item list changes to be "Select first."
Be sure to take note of the control box’s name under PROPERTIES > GENERAL > Name, because we’re about to use this in the R variable.
Changing single-variable questions via your control box
Next, you will need to create an R variable with conditional statements that link to the questions via Insert > R > Numeric variable. This will make a new numeric variable under Data Sets, creatively called “newvariable” by default. Displayr will reveal in the Object Inspector a blank box where you can put in the R CODE:
As per the picture above, you enter simple conditional statements with R. Basically, it references the control box (called
Combo.box in this example) and then each of the 4 options. The four variable names --
d4 -- pertain to each of the single-variable questions to use in the table. The code consists of very straightforward "IF and ELSE IF" statements.
Be sure to change the variable Structure to be nominal or ordinal (if you intend for the question to be categorical). This is done under INPUTS > Structure in the Object Inspector for the R variable (in the picture above at the very bottom under the code).
And that’s it! From there you can use your R variable in a table, directly in a visualization, or in another analysis. It will change dynamically as you alter the selection in the control box.
Changing multiple-variable questions via your control box
When working with multiple-variable questions, it may be possible to use the same approach of using 'if/else' code for each variable in your variable set, but there are some provisos:
- Your variables must be set together as either a Binary – Multi or Number – Multi, as applicable.
- You should have the same number of variables for the questions that are to be substituted.
- The variable labels should be applicable for all questions, as these can't dynamically change.
When the number of variables and/or variable labels are different between the questions you wish to dynamically change via a control box, it is better to substitute tables instead. The steps are as follows:
- Create separate tables for each of the questions listed in your control box, drag them off your page and select Appearance > Hide from the ribbon.
- Create an R output via Insert > R Output that selects which table to choose based on the table name (found under PROPERTIES > GENERAL > Name) and the control box selection:
if (Combo.box == "Awareness") table.D1.Age.by.Awareness else if (Combo.box == "Preference") table.D1.Age.by.Preferred.cola
- In the above example I have 2 control options that switch between 2 tables, one 'Age by Awareness', the other 'Age by Preferred Cola'. As the final output is a visualization, I've also hidden this R output and dragged it off the page.
- Once you update the visualization's output reference under Inputs > DATA SOURCE > Outputs in 'Pages' to this R output, you will then be able to dynamically control the data shown:
Changing the weighting dynamically with an R variable
You can apply the same technique to dynamically change the weighting. You essentially reference different weighting variables in the R code based on your selection in the control. For example:
if (Combo.box == "USA") weight_us else if (Combo.box == "France") weight_fr else if (Combo.box == "UK") weight_uk
Then make sure the R variable has the Usable as weight box checked in the Object Inspector. You can then apply that to a table (or chart or whatever) as your weighting variable.
Try for yourself
The above example is captured in this Displayr document. The R variables are the first two variables in the Data Set.Get started!