Skip to content

Instantly share code, notes, and snippets.

@PatrickRWright
Created May 8, 2020 14:21
Show Gist options
  • Save PatrickRWright/f0eb65f90fdcae1002432a475b31a188 to your computer and use it in GitHub Desktop.
Save PatrickRWright/f0eb65f90fdcae1002432a475b31a188 to your computer and use it in GitHub Desktop.
Created on Skills Network Labs
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Using `case_when` to conditionally `mutate`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"There are scenarios where you may want to create a new column in a `data.frame` based on conditions in your data. \n",
"You can write such a conditional statement within `mutate` by using `case_when`."
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"# lib\n",
"library(\"tidyverse\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For this example lets assume you have two classes \"f\" and \"m\". \n",
"Both have associated numerical values which need to be conditionally multiplied either by 2 for \"f\" or 100 for \"m\"."
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"# build dataset\n",
"set.seed(1337)\n",
"classes <- c(\"m\", \"f\")\n",
"class <- sample(classes, size = 20, replace = TRUE)\n",
"num <- sample(145:180, size = 20, replace = TRUE)\n",
"dataset <- as.data.frame(cbind(class, num), stringsAsFactors = FALSE)\n",
"dataset$num <- as.numeric(dataset$num)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<caption>A data.frame: 6 × 3</caption>\n",
"<thead>\n",
"\t<tr><th></th><th scope=col>class</th><th scope=col>num</th><th scope=col>mult</th></tr>\n",
"\t<tr><th></th><th scope=col>&lt;chr&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th></tr>\n",
"</thead>\n",
"<tbody>\n",
"\t<tr><th scope=row>1</th><td>f</td><td>175</td><td> 350</td></tr>\n",
"\t<tr><th scope=row>2</th><td>f</td><td>171</td><td> 342</td></tr>\n",
"\t<tr><th scope=row>3</th><td>m</td><td>146</td><td>14600</td></tr>\n",
"\t<tr><th scope=row>4</th><td>m</td><td>150</td><td>15000</td></tr>\n",
"\t<tr><th scope=row>5</th><td>m</td><td>165</td><td>16500</td></tr>\n",
"\t<tr><th scope=row>6</th><td>m</td><td>180</td><td>18000</td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"A data.frame: 6 × 3\n",
"\\begin{tabular}{r|lll}\n",
" & class & num & mult\\\\\n",
" & <chr> & <dbl> & <dbl>\\\\\n",
"\\hline\n",
"\t1 & f & 175 & 350\\\\\n",
"\t2 & f & 171 & 342\\\\\n",
"\t3 & m & 146 & 14600\\\\\n",
"\t4 & m & 150 & 15000\\\\\n",
"\t5 & m & 165 & 16500\\\\\n",
"\t6 & m & 180 & 18000\\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"A data.frame: 6 × 3\n",
"\n",
"| <!--/--> | class &lt;chr&gt; | num &lt;dbl&gt; | mult &lt;dbl&gt; |\n",
"|---|---|---|---|\n",
"| 1 | f | 175 | 350 |\n",
"| 2 | f | 171 | 342 |\n",
"| 3 | m | 146 | 14600 |\n",
"| 4 | m | 150 | 15000 |\n",
"| 5 | m | 165 | 16500 |\n",
"| 6 | m | 180 | 18000 |\n",
"\n"
],
"text/plain": [
" class num mult \n",
"1 f 175 350\n",
"2 f 171 342\n",
"3 m 146 14600\n",
"4 m 150 15000\n",
"5 m 165 16500\n",
"6 m 180 18000"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# create conditional column\n",
"dataset %>% \n",
" mutate(mult = case_when(class == \"f\" ~ (num * 2),\n",
" class == \"m\" ~ (num * 100))) %>%\n",
" head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Since the above example was quite simple and intended to illustrate the basics, let us now follow up with a \n",
"somewhat more convoluted example. We will create a patient dataset with relevant information to calculate the \n",
"so-called glomular filtration rate based of CKD-EPI (eGFR using CKD-EPI). A reference to an online calculator \n",
"and formula descriptions can be found [here](https://qxmd.com/calculate/calculator_251/egfr-using-ckd-epi). The CKD-EPI formula contains several conditional statements which \n",
"can all be implemented using `case_when`."
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<caption>A data.frame: 6 × 4</caption>\n",
"<thead>\n",
"\t<tr><th></th><th scope=col>sex</th><th scope=col>african_american</th><th scope=col>age</th><th scope=col>creatinine</th></tr>\n",
"\t<tr><th></th><th scope=col>&lt;chr&gt;</th><th scope=col>&lt;chr&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th></tr>\n",
"</thead>\n",
"<tbody>\n",
"\t<tr><th scope=row>1</th><td>female</td><td>no </td><td>78</td><td>1.2</td></tr>\n",
"\t<tr><th scope=row>2</th><td>female</td><td>no </td><td>86</td><td>0.5</td></tr>\n",
"\t<tr><th scope=row>3</th><td>male </td><td>yes</td><td>63</td><td>1.2</td></tr>\n",
"\t<tr><th scope=row>4</th><td>male </td><td>yes</td><td>72</td><td>1.3</td></tr>\n",
"\t<tr><th scope=row>5</th><td>male </td><td>no </td><td>35</td><td>0.4</td></tr>\n",
"\t<tr><th scope=row>6</th><td>male </td><td>no </td><td>25</td><td>0.4</td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"A data.frame: 6 × 4\n",
"\\begin{tabular}{r|llll}\n",
" & sex & african\\_american & age & creatinine\\\\\n",
" & <chr> & <chr> & <dbl> & <dbl>\\\\\n",
"\\hline\n",
"\t1 & female & no & 78 & 1.2\\\\\n",
"\t2 & female & no & 86 & 0.5\\\\\n",
"\t3 & male & yes & 63 & 1.2\\\\\n",
"\t4 & male & yes & 72 & 1.3\\\\\n",
"\t5 & male & no & 35 & 0.4\\\\\n",
"\t6 & male & no & 25 & 0.4\\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"A data.frame: 6 × 4\n",
"\n",
"| <!--/--> | sex &lt;chr&gt; | african_american &lt;chr&gt; | age &lt;dbl&gt; | creatinine &lt;dbl&gt; |\n",
"|---|---|---|---|---|\n",
"| 1 | female | no | 78 | 1.2 |\n",
"| 2 | female | no | 86 | 0.5 |\n",
"| 3 | male | yes | 63 | 1.2 |\n",
"| 4 | male | yes | 72 | 1.3 |\n",
"| 5 | male | no | 35 | 0.4 |\n",
"| 6 | male | no | 25 | 0.4 |\n",
"\n"
],
"text/plain": [
" sex african_american age creatinine\n",
"1 female no 78 1.2 \n",
"2 female no 86 0.5 \n",
"3 male yes 63 1.2 \n",
"4 male yes 72 1.3 \n",
"5 male no 35 0.4 \n",
"6 male no 25 0.4 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# build dataset of 20 Patients\n",
"set.seed(1337)\n",
"genders <- c(\"male\", \"female\")\n",
"african_american_classes <- c(\"yes\", \"no\")\n",
"age_range <- 18:100\n",
"crea_range <- (3:13) / 10\n",
"# sample values\n",
"sex <- sample(genders, size = 20, replace = TRUE)\n",
"african_american <- sample(african_american_classes, size = 20, replace = TRUE)\n",
"age <- sample(age_range, size = 20, replace = TRUE) # years\n",
"creatinine <- sample(crea_range, size = 20, replace = TRUE) # mg/dL\n",
"# fuse it all together\n",
"dataset <- as.data.frame(cbind(sex, african_american, age, creatinine),\n",
" stringsAsFactors = FALSE)\n",
"dataset$age <- as.numeric(dataset$age)\n",
"dataset$creatinine <- as.numeric(dataset$creatinine)\n",
"head(dataset)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now lets add the column for CKD-EPI to the `data.frame`. Below you can see that several intermediate columns \n",
"need to be added before the final CKD-EPI can be calculated. You can use the online [calculator](https://qxmd.com/calculate/calculator_251/egfr-using-ckd-epi) also mentioned above \n",
"to check the results if you would like to make sure."
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<table>\n",
"<caption>A data.frame: 20 × 8</caption>\n",
"<thead>\n",
"\t<tr><th scope=col>sex</th><th scope=col>african_american</th><th scope=col>age</th><th scope=col>creatinine</th><th scope=col>scr_div_kappa</th><th scope=col>min_scr_div_kappa</th><th scope=col>max_scr_div_kappa</th><th scope=col>ckd_epi</th></tr>\n",
"\t<tr><th scope=col>&lt;chr&gt;</th><th scope=col>&lt;chr&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th></tr>\n",
"</thead>\n",
"<tbody>\n",
"\t<tr><td>female</td><td>no </td><td>78</td><td>1.2</td><td>1.7142857</td><td>1.0000000</td><td>1.714286</td><td> 43.25155</td></tr>\n",
"\t<tr><td>female</td><td>no </td><td>86</td><td>0.5</td><td>0.7142857</td><td>0.7142857</td><td>1.000000</td><td> 87.63516</td></tr>\n",
"\t<tr><td>male </td><td>yes</td><td>63</td><td>1.2</td><td>1.3333333</td><td>1.0000000</td><td>1.333333</td><td> 74.14029</td></tr>\n",
"\t<tr><td>male </td><td>yes</td><td>72</td><td>1.3</td><td>1.4444444</td><td>1.0000000</td><td>1.444444</td><td> 63.17862</td></tr>\n",
"\t<tr><td>male </td><td>no </td><td>35</td><td>0.4</td><td>0.4444444</td><td>0.4444444</td><td>1.000000</td><td>153.88271</td></tr>\n",
"\t<tr><td>male </td><td>no </td><td>25</td><td>0.4</td><td>0.4444444</td><td>0.4444444</td><td>1.000000</td><td>165.08109</td></tr>\n",
"\t<tr><td>female</td><td>no </td><td>43</td><td>1.3</td><td>1.8571429</td><td>1.0000000</td><td>1.857143</td><td> 50.20542</td></tr>\n",
"\t<tr><td>male </td><td>no </td><td>53</td><td>0.8</td><td>0.8888889</td><td>0.8888889</td><td>1.000000</td><td>101.98891</td></tr>\n",
"\t<tr><td>male </td><td>yes</td><td>22</td><td>0.5</td><td>0.5555556</td><td>0.5555556</td><td>1.000000</td><td>178.28016</td></tr>\n",
"\t<tr><td>male </td><td>no </td><td>48</td><td>0.9</td><td>1.0000000</td><td>1.0000000</td><td>1.000000</td><td>100.64288</td></tr>\n",
"\t<tr><td>female</td><td>no </td><td>97</td><td>0.7</td><td>1.0000000</td><td>1.0000000</td><td>1.000000</td><td> 72.61795</td></tr>\n",
"\t<tr><td>female</td><td>yes</td><td>77</td><td>1.1</td><td>1.5714286</td><td>1.0000000</td><td>1.571429</td><td> 56.08184</td></tr>\n",
"\t<tr><td>female</td><td>no </td><td>69</td><td>0.6</td><td>0.8571429</td><td>0.8571429</td><td>1.000000</td><td> 93.00162</td></tr>\n",
"\t<tr><td>male </td><td>yes</td><td>51</td><td>0.3</td><td>0.3333333</td><td>0.3333333</td><td>1.000000</td><td>179.39530</td></tr>\n",
"\t<tr><td>female</td><td>no </td><td>82</td><td>1.0</td><td>1.4285714</td><td>1.0000000</td><td>1.428571</td><td> 52.42384</td></tr>\n",
"\t<tr><td>male </td><td>no </td><td>41</td><td>0.7</td><td>0.7777778</td><td>0.7777778</td><td>1.000000</td><td>117.21864</td></tr>\n",
"\t<tr><td>female</td><td>no </td><td>29</td><td>0.4</td><td>0.5714286</td><td>0.5714286</td><td>1.000000</td><td>140.75201</td></tr>\n",
"\t<tr><td>female</td><td>no </td><td>66</td><td>0.5</td><td>0.7142857</td><td>0.7142857</td><td>1.000000</td><td>100.85407</td></tr>\n",
"\t<tr><td>male </td><td>yes</td><td>61</td><td>0.8</td><td>0.8888889</td><td>0.8888889</td><td>1.000000</td><td>111.74559</td></tr>\n",
"\t<tr><td>male </td><td>yes</td><td>73</td><td>0.9</td><td>1.0000000</td><td>1.0000000</td><td>1.000000</td><td> 97.85830</td></tr>\n",
"</tbody>\n",
"</table>\n"
],
"text/latex": [
"A data.frame: 20 × 8\n",
"\\begin{tabular}{llllllll}\n",
" sex & african\\_american & age & creatinine & scr\\_div\\_kappa & min\\_scr\\_div\\_kappa & max\\_scr\\_div\\_kappa & ckd\\_epi\\\\\n",
" <chr> & <chr> & <dbl> & <dbl> & <dbl> & <dbl> & <dbl> & <dbl>\\\\\n",
"\\hline\n",
"\t female & no & 78 & 1.2 & 1.7142857 & 1.0000000 & 1.714286 & 43.25155\\\\\n",
"\t female & no & 86 & 0.5 & 0.7142857 & 0.7142857 & 1.000000 & 87.63516\\\\\n",
"\t male & yes & 63 & 1.2 & 1.3333333 & 1.0000000 & 1.333333 & 74.14029\\\\\n",
"\t male & yes & 72 & 1.3 & 1.4444444 & 1.0000000 & 1.444444 & 63.17862\\\\\n",
"\t male & no & 35 & 0.4 & 0.4444444 & 0.4444444 & 1.000000 & 153.88271\\\\\n",
"\t male & no & 25 & 0.4 & 0.4444444 & 0.4444444 & 1.000000 & 165.08109\\\\\n",
"\t female & no & 43 & 1.3 & 1.8571429 & 1.0000000 & 1.857143 & 50.20542\\\\\n",
"\t male & no & 53 & 0.8 & 0.8888889 & 0.8888889 & 1.000000 & 101.98891\\\\\n",
"\t male & yes & 22 & 0.5 & 0.5555556 & 0.5555556 & 1.000000 & 178.28016\\\\\n",
"\t male & no & 48 & 0.9 & 1.0000000 & 1.0000000 & 1.000000 & 100.64288\\\\\n",
"\t female & no & 97 & 0.7 & 1.0000000 & 1.0000000 & 1.000000 & 72.61795\\\\\n",
"\t female & yes & 77 & 1.1 & 1.5714286 & 1.0000000 & 1.571429 & 56.08184\\\\\n",
"\t female & no & 69 & 0.6 & 0.8571429 & 0.8571429 & 1.000000 & 93.00162\\\\\n",
"\t male & yes & 51 & 0.3 & 0.3333333 & 0.3333333 & 1.000000 & 179.39530\\\\\n",
"\t female & no & 82 & 1.0 & 1.4285714 & 1.0000000 & 1.428571 & 52.42384\\\\\n",
"\t male & no & 41 & 0.7 & 0.7777778 & 0.7777778 & 1.000000 & 117.21864\\\\\n",
"\t female & no & 29 & 0.4 & 0.5714286 & 0.5714286 & 1.000000 & 140.75201\\\\\n",
"\t female & no & 66 & 0.5 & 0.7142857 & 0.7142857 & 1.000000 & 100.85407\\\\\n",
"\t male & yes & 61 & 0.8 & 0.8888889 & 0.8888889 & 1.000000 & 111.74559\\\\\n",
"\t male & yes & 73 & 0.9 & 1.0000000 & 1.0000000 & 1.000000 & 97.85830\\\\\n",
"\\end{tabular}\n"
],
"text/markdown": [
"\n",
"A data.frame: 20 × 8\n",
"\n",
"| sex &lt;chr&gt; | african_american &lt;chr&gt; | age &lt;dbl&gt; | creatinine &lt;dbl&gt; | scr_div_kappa &lt;dbl&gt; | min_scr_div_kappa &lt;dbl&gt; | max_scr_div_kappa &lt;dbl&gt; | ckd_epi &lt;dbl&gt; |\n",
"|---|---|---|---|---|---|---|---|\n",
"| female | no | 78 | 1.2 | 1.7142857 | 1.0000000 | 1.714286 | 43.25155 |\n",
"| female | no | 86 | 0.5 | 0.7142857 | 0.7142857 | 1.000000 | 87.63516 |\n",
"| male | yes | 63 | 1.2 | 1.3333333 | 1.0000000 | 1.333333 | 74.14029 |\n",
"| male | yes | 72 | 1.3 | 1.4444444 | 1.0000000 | 1.444444 | 63.17862 |\n",
"| male | no | 35 | 0.4 | 0.4444444 | 0.4444444 | 1.000000 | 153.88271 |\n",
"| male | no | 25 | 0.4 | 0.4444444 | 0.4444444 | 1.000000 | 165.08109 |\n",
"| female | no | 43 | 1.3 | 1.8571429 | 1.0000000 | 1.857143 | 50.20542 |\n",
"| male | no | 53 | 0.8 | 0.8888889 | 0.8888889 | 1.000000 | 101.98891 |\n",
"| male | yes | 22 | 0.5 | 0.5555556 | 0.5555556 | 1.000000 | 178.28016 |\n",
"| male | no | 48 | 0.9 | 1.0000000 | 1.0000000 | 1.000000 | 100.64288 |\n",
"| female | no | 97 | 0.7 | 1.0000000 | 1.0000000 | 1.000000 | 72.61795 |\n",
"| female | yes | 77 | 1.1 | 1.5714286 | 1.0000000 | 1.571429 | 56.08184 |\n",
"| female | no | 69 | 0.6 | 0.8571429 | 0.8571429 | 1.000000 | 93.00162 |\n",
"| male | yes | 51 | 0.3 | 0.3333333 | 0.3333333 | 1.000000 | 179.39530 |\n",
"| female | no | 82 | 1.0 | 1.4285714 | 1.0000000 | 1.428571 | 52.42384 |\n",
"| male | no | 41 | 0.7 | 0.7777778 | 0.7777778 | 1.000000 | 117.21864 |\n",
"| female | no | 29 | 0.4 | 0.5714286 | 0.5714286 | 1.000000 | 140.75201 |\n",
"| female | no | 66 | 0.5 | 0.7142857 | 0.7142857 | 1.000000 | 100.85407 |\n",
"| male | yes | 61 | 0.8 | 0.8888889 | 0.8888889 | 1.000000 | 111.74559 |\n",
"| male | yes | 73 | 0.9 | 1.0000000 | 1.0000000 | 1.000000 | 97.85830 |\n",
"\n"
],
"text/plain": [
" sex african_american age creatinine scr_div_kappa min_scr_div_kappa\n",
"1 female no 78 1.2 1.7142857 1.0000000 \n",
"2 female no 86 0.5 0.7142857 0.7142857 \n",
"3 male yes 63 1.2 1.3333333 1.0000000 \n",
"4 male yes 72 1.3 1.4444444 1.0000000 \n",
"5 male no 35 0.4 0.4444444 0.4444444 \n",
"6 male no 25 0.4 0.4444444 0.4444444 \n",
"7 female no 43 1.3 1.8571429 1.0000000 \n",
"8 male no 53 0.8 0.8888889 0.8888889 \n",
"9 male yes 22 0.5 0.5555556 0.5555556 \n",
"10 male no 48 0.9 1.0000000 1.0000000 \n",
"11 female no 97 0.7 1.0000000 1.0000000 \n",
"12 female yes 77 1.1 1.5714286 1.0000000 \n",
"13 female no 69 0.6 0.8571429 0.8571429 \n",
"14 male yes 51 0.3 0.3333333 0.3333333 \n",
"15 female no 82 1.0 1.4285714 1.0000000 \n",
"16 male no 41 0.7 0.7777778 0.7777778 \n",
"17 female no 29 0.4 0.5714286 0.5714286 \n",
"18 female no 66 0.5 0.7142857 0.7142857 \n",
"19 male yes 61 0.8 0.8888889 0.8888889 \n",
"20 male yes 73 0.9 1.0000000 1.0000000 \n",
" max_scr_div_kappa ckd_epi \n",
"1 1.714286 43.25155\n",
"2 1.000000 87.63516\n",
"3 1.333333 74.14029\n",
"4 1.444444 63.17862\n",
"5 1.000000 153.88271\n",
"6 1.000000 165.08109\n",
"7 1.857143 50.20542\n",
"8 1.000000 101.98891\n",
"9 1.000000 178.28016\n",
"10 1.000000 100.64288\n",
"11 1.000000 72.61795\n",
"12 1.571429 56.08184\n",
"13 1.000000 93.00162\n",
"14 1.000000 179.39530\n",
"15 1.428571 52.42384\n",
"16 1.000000 117.21864\n",
"17 1.000000 140.75201\n",
"18 1.000000 100.85407\n",
"19 1.000000 111.74559\n",
"20 1.000000 97.85830"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# The CKD-EPI equation, expressed as a single equation, is:\n",
"# GFR = 141 * min(Scr/κ,1)^α * max(Scr/κ, 1)^-1.209 * 0.993^Age * 1.018 [if female] * 1.159 [if black]\n",
"\n",
"# Scr is serum creatinine (mg/dL),\n",
"# κ is 0.7 for females and 0.9 for males,\n",
"kappa_f <- 0.7\n",
"kappa_m <- 0.9\n",
"# α is -0.329 for females and -0.411 for males,\n",
"alpha_f <- -0.329\n",
"alpha_m <- -0.411\n",
"# min indicates the minimum of Scr/κ or 1, and \n",
"# max indicates the maximum of Scr/κ or 1.\n",
"\n",
"dataset %>%\n",
" # calculate serum creatinine divided by kappa\n",
" mutate(scr_div_kappa = case_when(# female\n",
" sex == \"female\" ~ creatinine / kappa_f,\n",
" # males\n",
" sex == \"male\" ~ creatinine / kappa_m)) %>%\n",
" # create min return value\n",
" mutate(min_scr_div_kappa = case_when(scr_div_kappa >= 1 ~ 1,\n",
" # TRUE indicates else here\n",
" TRUE ~ scr_div_kappa)) %>%\n",
" # create max return values\n",
" mutate(max_scr_div_kappa = case_when(scr_div_kappa <= 1 ~ 1,\n",
" # TRUE indicates else here\n",
" TRUE ~ scr_div_kappa)) %>%\n",
" # CKD-EPI\n",
" mutate(ckd_epi = case_when(\n",
" # african american females\n",
" sex == \"female\" & african_american == \"yes\" ~ \n",
" 141 * (min_scr_div_kappa ^ alpha_f) *\n",
" (max_scr_div_kappa ^ -1.209) *\n",
" (0.993 ^ age) * 1.018 * 1.159,\n",
" \n",
" # white females\n",
" sex == \"female\" & african_american == \"no\" ~ \n",
" 141 * (min_scr_div_kappa ^ alpha_f) *\n",
" (max_scr_div_kappa ^ -1.209) *\n",
" (0.993 ^ age) * 1.018,\n",
" \n",
" # african american males\n",
" sex == \"male\" & african_american == \"yes\" ~ \n",
" 141 * (min_scr_div_kappa ^ alpha_m) *\n",
" (max_scr_div_kappa ^ -1.209) *\n",
" (0.993 ^ age) * 1.159,\n",
" \n",
" # white males\n",
" sex == \"male\" & african_american == \"no\" ~ \n",
" 141 * (min_scr_div_kappa ^ alpha_m) *\n",
" (max_scr_div_kappa ^ -1.209) *\n",
" (0.993 ^ age)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Inspired by [this reference in stack overflow](https://stackoverflow.com/questions/22337394/dplyr-mutate-with-conditional-values)."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "R",
"language": "R",
"name": "conda-env-r-r"
},
"language_info": {
"codemirror_mode": "r",
"file_extension": ".r",
"mimetype": "text/x-r-source",
"name": "R",
"pygments_lexer": "r",
"version": "3.5.1"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
@PatrickRWright
Copy link
Author

PatrickRWright commented May 8, 2020

Original comment in older gist by @DrEspresso:
Careful, the right hand side in case_when needs to be of the same data type! E.g. if you want to return NA for all other cases, you need to specify TRUE ~ NA_integer_, as NA is of type logical and will throw an error.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment