EVOLUTION-MANAGER
Edit File: translation-function.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="generator" content="pandoc" /> <meta http-equiv="X-UA-Compatible" content="IE=EDGE" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>Function translation</title> <script>// Pandoc 2.9 adds attributes on both header and div. We remove the former (to // be compatible with the behavior of Pandoc < 2.8). document.addEventListener('DOMContentLoaded', function(e) { var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); var i, h, a; for (i = 0; i < hs.length; i++) { h = hs[i]; if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 a = h.attributes; while (a.length > 0) h.removeAttribute(a[0].name); } }); </script> <style type="text/css">code{white-space: pre;}</style> <style type="text/css" data-origin="pandoc"> pre > code.sourceCode { white-space: pre; position: relative; } pre > code.sourceCode > span { display: inline-block; line-height: 1.25; } pre > code.sourceCode > span:empty { height: 1.2em; } code.sourceCode > span { color: inherit; text-decoration: inherit; } div.sourceCode { margin: 1em 0; } pre.sourceCode { margin: 0; } @media screen { div.sourceCode { overflow: auto; } } @media print { pre > code.sourceCode { white-space: pre-wrap; } pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; } } pre.numberSource code { counter-reset: source-line 0; } pre.numberSource code > span { position: relative; left: -4em; counter-increment: source-line; } pre.numberSource code > span > a:first-child::before { content: counter(source-line); position: relative; left: -1em; text-align: right; vertical-align: baseline; border: none; display: inline-block; -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; padding: 0 4px; width: 4em; color: #aaaaaa; } pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; } div.sourceCode { } @media screen { pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; } } code span.al { color: #ff0000; font-weight: bold; } /* Alert */ code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */ code span.at { color: #7d9029; } /* Attribute */ code span.bn { color: #40a070; } /* BaseN */ code span.bu { } /* BuiltIn */ code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */ code span.ch { color: #4070a0; } /* Char */ code span.cn { color: #880000; } /* Constant */ code span.co { color: #60a0b0; font-style: italic; } /* Comment */ code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */ code span.do { color: #ba2121; font-style: italic; } /* Documentation */ code span.dt { color: #902000; } /* DataType */ code span.dv { color: #40a070; } /* DecVal */ code span.er { color: #ff0000; font-weight: bold; } /* Error */ code span.ex { } /* Extension */ code span.fl { color: #40a070; } /* Float */ code span.fu { color: #06287e; } /* Function */ code span.im { } /* Import */ code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */ code span.kw { color: #007020; font-weight: bold; } /* Keyword */ code span.op { color: #666666; } /* Operator */ code span.ot { color: #007020; } /* Other */ code span.pp { color: #bc7a00; } /* Preprocessor */ code span.sc { color: #4070a0; } /* SpecialChar */ code span.ss { color: #bb6688; } /* SpecialString */ code span.st { color: #4070a0; } /* String */ code span.va { color: #19177c; } /* Variable */ code span.vs { color: #4070a0; } /* VerbatimString */ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */ </style> <script> // apply pandoc div.sourceCode style to pre.sourceCode instead (function() { var sheets = document.styleSheets; for (var i = 0; i < sheets.length; i++) { if (sheets[i].ownerNode.dataset["origin"] !== "pandoc") continue; try { var rules = sheets[i].cssRules; } catch (e) { continue; } for (var j = 0; j < rules.length; j++) { var rule = rules[j]; // check if there is a div.sourceCode rule if (rule.type !== rule.STYLE_RULE || rule.selectorText !== "div.sourceCode") continue; var style = rule.style.cssText; // check if color or background-color is set if (rule.style.color === '' && rule.style.backgroundColor === '') continue; // replace div.sourceCode by a pre.sourceCode rule sheets[i].deleteRule(j); sheets[i].insertRule('pre.sourceCode{' + style + '}', j); } } })(); </script> <style type="text/css">body { background-color: #fff; margin: 1em auto; max-width: 700px; overflow: visible; padding-left: 2em; padding-right: 2em; font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.35; } #TOC { clear: both; margin: 0 0 10px 10px; padding: 4px; width: 400px; border: 1px solid #CCCCCC; border-radius: 5px; background-color: #f6f6f6; font-size: 13px; line-height: 1.3; } #TOC .toctitle { font-weight: bold; font-size: 15px; margin-left: 5px; } #TOC ul { padding-left: 40px; margin-left: -1.5em; margin-top: 5px; margin-bottom: 5px; } #TOC ul ul { margin-left: -2em; } #TOC li { line-height: 16px; } table { margin: 1em auto; border-width: 1px; border-color: #DDDDDD; border-style: outset; border-collapse: collapse; } table th { border-width: 2px; padding: 5px; border-style: inset; } table td { border-width: 1px; border-style: inset; line-height: 18px; padding: 5px 5px; } table, table th, table td { border-left-style: none; border-right-style: none; } table thead, table tr.even { background-color: #f7f7f7; } p { margin: 0.5em 0; } blockquote { background-color: #f6f6f6; padding: 0.25em 0.75em; } hr { border-style: solid; border: none; border-top: 1px solid #777; margin: 28px 0; } dl { margin-left: 0; } dl dd { margin-bottom: 13px; margin-left: 13px; } dl dt { font-weight: bold; } ul { margin-top: 0; } ul li { list-style: circle outside; } ul ul { margin-bottom: 0; } pre, code { background-color: #f7f7f7; border-radius: 3px; color: #333; white-space: pre-wrap; } pre { border-radius: 3px; margin: 5px 0px 10px 0px; padding: 10px; } pre:not([class]) { background-color: #f7f7f7; } code { font-family: Consolas, Monaco, 'Courier New', monospace; font-size: 85%; } p > code, li > code { padding: 2px 0px; } div.figure { text-align: center; } img { background-color: #FFFFFF; padding: 2px; border: 1px solid #DDDDDD; border-radius: 3px; border: 1px solid #CCCCCC; margin: 0 5px; } h1 { margin-top: 0; font-size: 35px; line-height: 40px; } h2 { border-bottom: 4px solid #f7f7f7; padding-top: 10px; padding-bottom: 2px; font-size: 145%; } h3 { border-bottom: 2px solid #f7f7f7; padding-top: 10px; font-size: 120%; } h4 { border-bottom: 1px solid #f7f7f7; margin-left: 8px; font-size: 105%; } h5, h6 { border-bottom: 1px solid #ccc; font-size: 105%; } a { color: #0033dd; text-decoration: none; } a:hover { color: #6666ff; } a:visited { color: #800080; } a:visited:hover { color: #BB00BB; } a[href^="http:"] { text-decoration: underline; } a[href^="https:"] { text-decoration: underline; } code > span.kw { color: #555; font-weight: bold; } code > span.dt { color: #902000; } code > span.dv { color: #40a070; } code > span.bn { color: #d14; } code > span.fl { color: #d14; } code > span.ch { color: #d14; } code > span.st { color: #d14; } code > span.co { color: #888888; font-style: italic; } code > span.ot { color: #007020; } code > span.al { color: #ff0000; font-weight: bold; } code > span.fu { color: #900; font-weight: bold; } code > span.er { color: #a61717; background-color: #e3d2d2; } </style> </head> <body> <h1 class="title toc-ignore">Function translation</h1> <p>There are two parts to dbplyr SQL translation: translating dplyr verbs, and translating expressions within those verbs. This vignette describes how individual expressions (function calls) are translated; <code>vignette("translate-verb")</code> describes how entire verbs are translated.</p> <div class="sourceCode" id="cb1"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb1-1"><a href="#cb1-1"></a><span class="kw">library</span>(dbplyr)</span> <span id="cb1-2"><a href="#cb1-2"></a><span class="kw">library</span>(dplyr)</span></code></pre></div> <p><code>dbplyr::translate_sql()</code> powers translation of individual function calls, and I’ll use it extensively in this vignette to show what’s happening. You shouldn’t need to use it ordinary code as dbplyr takes care of the translation automatically.</p> <div class="sourceCode" id="cb2"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb2-1"><a href="#cb2-1"></a><span class="kw">translate_sql</span>((x <span class="op">+</span><span class="st"> </span>y) <span class="op">/</span><span class="st"> </span><span class="dv">2</span>)</span> <span id="cb2-2"><a href="#cb2-2"></a><span class="co">#> <SQL> (`x` + `y`) / 2.0</span></span></code></pre></div> <p><code>translate_sql()</code> takes an optional <code>con</code> parameter. If not supplied, this causes dplyr to generate (approximately) SQL-92 compliant SQL. If supplied, dplyr uses <code>sql_translate_env()</code> to look up a custom environment which makes it possible for different databases to generate slightly different SQL: see <code>vignette("new-backend")</code> for more details. You can use the various simulate helpers to see the translations used by different backends:</p> <div class="sourceCode" id="cb3"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb3-1"><a href="#cb3-1"></a><span class="kw">translate_sql</span>(x <span class="op">^</span><span class="st"> </span>2L)</span> <span id="cb3-2"><a href="#cb3-2"></a><span class="co">#> <SQL> POWER(`x`, 2)</span></span> <span id="cb3-3"><a href="#cb3-3"></a><span class="kw">translate_sql</span>(x <span class="op">^</span><span class="st"> </span>2L, <span class="dt">con =</span> <span class="kw">simulate_sqlite</span>())</span> <span id="cb3-4"><a href="#cb3-4"></a><span class="co">#> <SQL> POWER(`x`, 2)</span></span> <span id="cb3-5"><a href="#cb3-5"></a><span class="kw">translate_sql</span>(x <span class="op">^</span><span class="st"> </span>2L, <span class="dt">con =</span> <span class="kw">simulate_access</span>())</span> <span id="cb3-6"><a href="#cb3-6"></a><span class="co">#> <SQL> `x` ^ 2</span></span></code></pre></div> <p>Perfect translation is not possible because databases don’t have all the functions that R does. The goal of dplyr is to provide a semantic rather than a literal translation: what you mean, rather than precisely what is done. In fact, even for functions that exist both in databases and R, you shouldn’t expect results to be identical; database programmers have different priorities than R core programmers. For example, in R in order to get a higher level of numerical accuracy, <code>mean()</code> loops through the data twice. R’s <code>mean()</code> also provides a <code>trim</code> option for computing trimmed means; this is something that databases do not provide.</p> <p>If you’re interested in how <code>translate_sql()</code> is implemented, the basic techniques that underlie the implementation of <code>translate_sql()</code> are described in <a href="http://adv-r.hadley.nz/translation.html">“Advanced R”</a>.</p> <div id="basic-differences" class="section level2"> <h2>Basic differences</h2> <p>The following examples work through some of the basic differences between R and SQL.</p> <ul> <li><p><code>"</code> and <code>'</code> mean different things</p> <div class="sourceCode" id="cb4"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb4-1"><a href="#cb4-1"></a><span class="co"># In SQLite variable names are escaped by double quotes:</span></span> <span id="cb4-2"><a href="#cb4-2"></a><span class="kw">translate_sql</span>(x)</span> <span id="cb4-3"><a href="#cb4-3"></a><span class="co">#> <SQL> `x`</span></span> <span id="cb4-4"><a href="#cb4-4"></a><span class="co"># And strings are escaped by single quotes</span></span> <span id="cb4-5"><a href="#cb4-5"></a><span class="kw">translate_sql</span>(<span class="st">"x"</span>)</span> <span id="cb4-6"><a href="#cb4-6"></a><span class="co">#> <SQL> 'x'</span></span></code></pre></div></li> <li><p>And some functions have different argument orders:</p> <div class="sourceCode" id="cb5"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb5-1"><a href="#cb5-1"></a><span class="kw">translate_sql</span>(<span class="kw">substr</span>(x, <span class="dv">5</span>, <span class="dv">10</span>))</span> <span id="cb5-2"><a href="#cb5-2"></a><span class="co">#> <SQL> SUBSTR(`x`, 5, 6)</span></span> <span id="cb5-3"><a href="#cb5-3"></a><span class="kw">translate_sql</span>(<span class="kw">log</span>(x, <span class="dv">10</span>))</span> <span id="cb5-4"><a href="#cb5-4"></a><span class="co">#> <SQL> LOG(10.0, `x`)</span></span></code></pre></div></li> <li><p>R and SQL have different defaults for integers and reals. In R, 1 is a real, and 1L is an integer. In SQL, 1 is an integer, and 1.0 is a real</p> <div class="sourceCode" id="cb6"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb6-1"><a href="#cb6-1"></a><span class="kw">translate_sql</span>(<span class="dv">1</span>)</span> <span id="cb6-2"><a href="#cb6-2"></a><span class="co">#> <SQL> 1.0</span></span> <span id="cb6-3"><a href="#cb6-3"></a><span class="kw">translate_sql</span>(1L)</span> <span id="cb6-4"><a href="#cb6-4"></a><span class="co">#> <SQL> 1</span></span></code></pre></div></li> </ul> </div> <div id="known-functions" class="section level2"> <h2>Known functions</h2> <div id="mathematics" class="section level3"> <h3>Mathematics</h3> <ul> <li>basic math operators: <code>+</code>, <code>-</code>, <code>*</code>, <code>/</code>, <code>^</code></li> <li>trigonometry: <code>acos()</code>, <code>asin()</code>, <code>atan()</code>, <code>atan2()</code>, <code>cos()</code>, <code>cot()</code>, <code>tan()</code>, <code>sin()</code></li> <li>hypergeometric: <code>cosh()</code>, <code>coth()</code>, <code>sinh()</code>, <code>tanh()</code></li> <li>logarithmic: <code>log()</code>, <code>log10()</code>, <code>exp()</code></li> <li>misc: <code>abs()</code>, <code>ceiling()</code>, <code>sqrt()</code>, <code>sign()</code>, <code>round()</code></li> </ul> </div> </div> <div id="modulo-arithmetic" class="section level2"> <h2>Modulo arithmetic</h2> <p>dbplyr translates <code>%%</code> and <code>%/%</code> to their SQL equivalents but note that they are not precisely the same: most databases use truncated division where the modulo operator takes the sign of the dividend, where R using the mathematically preferred floored division with the modulo sign taking the sign of the divisor.</p> <div class="sourceCode" id="cb7"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb7-1"><a href="#cb7-1"></a>df <-<span class="st"> </span><span class="kw">tibble</span>(</span> <span id="cb7-2"><a href="#cb7-2"></a> <span class="dt">x =</span> <span class="kw">c</span>(10L, 10L, <span class="op">-</span>10L, <span class="op">-</span>10L), </span> <span id="cb7-3"><a href="#cb7-3"></a> <span class="dt">y =</span> <span class="kw">c</span>(3L, <span class="op">-</span>3L, 3L, <span class="op">-</span>3L)</span> <span id="cb7-4"><a href="#cb7-4"></a>)</span> <span id="cb7-5"><a href="#cb7-5"></a>mf <-<span class="st"> </span><span class="kw">tbl_memdb</span>(df)</span> <span id="cb7-6"><a href="#cb7-6"></a></span> <span id="cb7-7"><a href="#cb7-7"></a>df <span class="op">%>%</span><span class="st"> </span><span class="kw">mutate</span>(x <span class="op">%%</span><span class="st"> </span>y, x <span class="op">%/%</span><span class="st"> </span>y)</span> <span id="cb7-8"><a href="#cb7-8"></a><span class="co">#> # A tibble: 4 x 4</span></span> <span id="cb7-9"><a href="#cb7-9"></a><span class="co">#> x y `x%%y` `x%/%y`</span></span> <span id="cb7-10"><a href="#cb7-10"></a><span class="co">#> <int> <int> <int> <int></span></span> <span id="cb7-11"><a href="#cb7-11"></a><span class="co">#> 1 10 3 1 3</span></span> <span id="cb7-12"><a href="#cb7-12"></a><span class="co">#> 2 10 -3 -2 -4</span></span> <span id="cb7-13"><a href="#cb7-13"></a><span class="co">#> 3 -10 3 2 -4</span></span> <span id="cb7-14"><a href="#cb7-14"></a><span class="co">#> 4 -10 -3 -1 3</span></span> <span id="cb7-15"><a href="#cb7-15"></a></span> <span id="cb7-16"><a href="#cb7-16"></a>mf <span class="op">%>%</span><span class="st"> </span><span class="kw">mutate</span>(x <span class="op">%%</span><span class="st"> </span>y, x <span class="op">%/%</span><span class="st"> </span>y)</span> <span id="cb7-17"><a href="#cb7-17"></a><span class="co">#> # Source: lazy query [?? x 4]</span></span> <span id="cb7-18"><a href="#cb7-18"></a><span class="co">#> # Database: sqlite 3.30.1 [:memory:]</span></span> <span id="cb7-19"><a href="#cb7-19"></a><span class="co">#> x y `x%%y` `x%/%y`</span></span> <span id="cb7-20"><a href="#cb7-20"></a><span class="co">#> <int> <int> <int> <int></span></span> <span id="cb7-21"><a href="#cb7-21"></a><span class="co">#> 1 10 3 1 3</span></span> <span id="cb7-22"><a href="#cb7-22"></a><span class="co">#> 2 10 -3 1 -3</span></span> <span id="cb7-23"><a href="#cb7-23"></a><span class="co">#> 3 -10 3 -1 -3</span></span> <span id="cb7-24"><a href="#cb7-24"></a><span class="co">#> 4 -10 -3 -1 3</span></span></code></pre></div> <div id="logical-comparisons" class="section level3"> <h3>Logical comparisons</h3> <ul> <li>logical comparisons: <code><</code>, <code><=</code>, <code>!=</code>, <code>>=</code>, <code>></code>, <code>==</code>, <code>%in%</code></li> <li>boolean operations: <code>&</code>, <code>&&</code>, <code>|</code>, <code>||</code>, <code>!</code>, <code>xor()</code></li> </ul> </div> <div id="aggregation" class="section level3"> <h3>Aggregation</h3> <p>All database provide translation for the basic aggregations: <code>mean()</code>, <code>sum()</code>, <code>min()</code>, <code>max()</code>, <code>sd()</code>, <code>var()</code>. Databases automatically drop NULLs (their equivalent of missing values) whereas in R you have to ask nicely. The aggregation functions warn you about this important difference:</p> <div class="sourceCode" id="cb8"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb8-1"><a href="#cb8-1"></a><span class="kw">translate_sql</span>(<span class="kw">mean</span>(x))</span> <span id="cb8-2"><a href="#cb8-2"></a><span class="co">#> Warning: Missing values are always removed in SQL.</span></span> <span id="cb8-3"><a href="#cb8-3"></a><span class="co">#> Use `AVG(x, na.rm = TRUE)` to silence this warning</span></span> <span id="cb8-4"><a href="#cb8-4"></a><span class="co">#> This warning is displayed only once per session.</span></span> <span id="cb8-5"><a href="#cb8-5"></a><span class="co">#> <SQL> AVG(`x`) OVER ()</span></span> <span id="cb8-6"><a href="#cb8-6"></a><span class="kw">translate_sql</span>(<span class="kw">mean</span>(x, <span class="dt">na.rm =</span> <span class="ot">TRUE</span>))</span> <span id="cb8-7"><a href="#cb8-7"></a><span class="co">#> <SQL> AVG(`x`) OVER ()</span></span></code></pre></div> <p>Note that, by default, <code>translate()</code> assumes that the call is inside a <code>mutate()</code> or <code>filter()</code> and generates a window translation. If you want to see the equivalent <code>summarise()</code>/aggregation translation, use <code>window = FALSE</code>:</p> <div class="sourceCode" id="cb9"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb9-1"><a href="#cb9-1"></a><span class="kw">translate_sql</span>(<span class="kw">mean</span>(x, <span class="dt">na.rm =</span> <span class="ot">TRUE</span>), <span class="dt">window =</span> <span class="ot">FALSE</span>)</span> <span id="cb9-2"><a href="#cb9-2"></a><span class="co">#> <SQL> AVG(`x`)</span></span></code></pre></div> </div> <div id="conditional-evaluation" class="section level3"> <h3>Conditional evaluation</h3> <p><code>if</code> and <code>switch()</code> are translate to <code>CASE WHEN</code>:</p> <div class="sourceCode" id="cb10"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb10-1"><a href="#cb10-1"></a><span class="kw">translate_sql</span>(<span class="cf">if</span> (x <span class="op">></span><span class="st"> </span><span class="dv">5</span>) <span class="st">"big"</span> <span class="cf">else</span> <span class="st">"small"</span>)</span> <span id="cb10-2"><a href="#cb10-2"></a><span class="co">#> <SQL> CASE WHEN (`x` > 5.0) THEN ('big') WHEN NOT(`x` > 5.0) THEN ('small') </span><span class="re">END</span></span> <span id="cb10-3"><a href="#cb10-3"></a><span class="kw">translate_sql</span>(<span class="cf">switch</span>(x, <span class="dt">a =</span> 1L, <span class="dt">b =</span> 2L, 3L))</span> <span id="cb10-4"><a href="#cb10-4"></a><span class="co">#> <SQL> CASE `x` WHEN ('a') THEN (1) WHEN ('b') THEN (2) ELSE (3) </span><span class="re">END</span></span></code></pre></div> </div> <div id="string-manipulation" class="section level3"> <h3>String manipulation</h3> </div> <div id="datetime" class="section level3"> <h3>Date/time</h3> <ul> <li>string functions: <code>tolower</code>, <code>toupper</code>, <code>trimws</code>, <code>nchar</code>, <code>substr</code></li> <li>coerce types: <code>as.numeric</code>, <code>as.integer</code>, <code>as.character</code></li> </ul> </div> </div> <div id="unknown-functions" class="section level2"> <h2>Unknown functions</h2> <p>Any function that dplyr doesn’t know how to convert is left as is. This means that database functions that are not covered by dplyr can be used directly via <code>translate_sql()</code>. Here a couple of examples that will work with <a href="http://www.sqlite.org/lang_corefunc.html">SQLite</a>:</p> <div class="sourceCode" id="cb11"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb11-1"><a href="#cb11-1"></a><span class="kw">translate_sql</span>(<span class="kw">glob</span>(x, y))</span> <span id="cb11-2"><a href="#cb11-2"></a><span class="co">#> <SQL> glob(`x`, `y`)</span></span> <span id="cb11-3"><a href="#cb11-3"></a><span class="kw">translate_sql</span>(x <span class="op">%like%</span><span class="st"> "ab%"</span>)</span> <span id="cb11-4"><a href="#cb11-4"></a><span class="co">#> <SQL> `x` like 'ab%'</span></span></code></pre></div> <p>See <code>vignette("sql")</code> for more details.</p> </div> <div id="window-functions" class="section level2"> <h2>Window functions</h2> <p>Things get a little trickier with window functions, because SQL’s window functions are considerably more expressive than the specific variants provided by base R or dplyr. They have the form <code>[expression] OVER ([partition clause] [order clause] [frame_clause])</code>:</p> <ul> <li><p>The <strong>expression</strong> is a combination of variable names and window functions. Support for window functions varies from database to database, but most support the ranking functions, <code>lead</code>, <code>lag</code>, <code>nth</code>, <code>first</code>, <code>last</code>, <code>count</code>, <code>min</code>, <code>max</code>, <code>sum</code>, <code>avg</code> and <code>stddev</code>.</p></li> <li><p>The <strong>partition clause</strong> specifies how the window function is broken down over groups. It plays an analogous role to <code>GROUP BY</code> for aggregate functions, and <code>group_by()</code> in dplyr. It is possible for different window functions to be partitioned into different groups, but not all databases support it, and neither does dplyr.</p></li> <li><p>The <strong>order clause</strong> controls the ordering (when it makes a difference). This is important for the ranking functions since it specifies which variables to rank by, but it’s also needed for cumulative functions and lead. Whenever you’re thinking about before and after in SQL, you must always tell it which variable defines the order. If the order clause is missing when needed, some databases fail with an error message while others return non-deterministic results.</p></li> <li><p>The <strong>frame clause</strong> defines which rows, or <strong>frame</strong>, that are passed to the window function, describing which rows (relative to the current row) should be included. The frame clause provides two offsets which determine the start and end of frame. There are three special values: -Inf means to include all preceding rows (in SQL, “unbounded preceding”), 0 means the current row (“current row”), and Inf means all following rows (“unbounded following”). The complete set of options is comprehensive, but fairly confusing, and is summarised visually below.</p> <p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABN0AAAHfCAIAAADrwDlwAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAuIwAALiMBeKU/dgAAAdVpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpDb21wcmVzc2lvbj41PC90aWZmOkNvbXByZXNzaW9uPgogICAgICAgICA8dGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPjI8L3RpZmY6UGhvdG9tZXRyaWNJbnRlcnByZXRhdGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CrDjMt0AAEAASURBVHgB7J0FmHPF+beDu7u7u1OkWHEoTnEoLkVKi5UihRYptHgLFG+RosUp7hR3d3d3/+7tw396vpNscnaT7OZk773eK++cycgz90yS85tnZs4w33//fcU/CUhAAhKQgAQkIAEJSEACEpDAIBEYdpDqtVoJSEACEpCABCQgAQlIQAISkEAPAXWp40ACEpCABCQgAQlIQAISkIAEBpOAunQw6Vu3BCQgAQlIQAISkIAEJCABCahLHQMSkIAEJCABCUhAAhKQgAQkMJgE1KWDSd+6JSABCUhAAhKQgAQkIAEJSGB4EbScwHvvvXfXXXc9/PDD44033tRTT73YYouNOOKILa+ltQV++eWXDz744N133/3RRx/NNNNMc8wxxwwzzNDaKtpX2sknnzzaaKOtt9567auiVSV/8sknN95443PPPTfNNNMsuuii4447bqtKHoBySsS5jOO5jN8bAzDqrEICEpCABCQggaFCgOfE+NcqAtwNr7766rmhM8UUU5x++umtqqId5Rx//PE55TzMMMNsv/32iKh2VNfaMu+55x6AzzjjjK0tth2lnXHGGRNMMEEaHkBecMEFX3/99XbU1fIyS8S5dOO5pN8bLR9jFigBCUhAAhKQwFAmMAyNTzfKBpohwM3lmmuuecUVV4wwwgi4wuaaa65HHnkE59i3336LArnkkktWWWWVZspvU96jjjpql112ofBZZ50Vs8cee+zbbrvt9ttvJ2bZZZe9+uqr21RvS4r97rvvmAi49NJL0aVPPvlkS8psUyHnnnsuHl0+blNOOeVyyy2HX/q666579913Z5999ptuuqnDHacl4ly68VzS7402fUwsVgISkIAEJCCBoUtgKIvy1rb9oosuYhixoPTf//53Kvntt99eYIEFiJ9llllSZOcEnnnmmRj6W2+9ddaqww47LOLPO++8bHyHhN9///1bb7312GOPXWihhcLODveXfvrppxNOOCGmLrPMMl9//XVgZN3mVFNNReTKK6/cIWBzZpSOcxnHcxm/N3LjxEsJSEACEpCABCTQPIHWnHv06quvHnDAAeuss87hhx/+4osvhlTgFVfAn//857XXXnvDDTf861//iucwvdV9AZQSjcInhjcstW788ceHDJd48z777LMU3yGBs846C0smm2wyeidr0q9//es555yTmLhpzr7VCeHddtuNXbu/+MUv7rzzzk6wp6ENp5566ltvvTXyyCOj84cf/odN3eOMMw4rTsl71VVXvfnmmw0LGfgEpeNcxvFcxu+NNg1Ff0faBNZiJSABCUhAAqUg0IJzj+69914cPnFjff755+++++6nnHLKZpttxo34kksu+fjjjwcIbhlZy3rxxRfntjKWAlMRI+P+cpFFFskljiWarIRku+aoo46ae3dwLx999FEMmH/++YcdNj9DMd988z300EORYHCNrK6d9cbffPNNxHNc0/3331+dpqNicKFjz9JLL40WzRpGzCijjPL5559fcMEFbOjNvtUJ4dJxLuN4LuP3RjsGp78j7aBqmRKQgAQkIIESEcirkb6ajsd2yy23RJTiEb322msPPvjgkUYaaauttuI0WmIQpdzasrNujz32YOMifqETTjihr1WUJT1rX6+//vq11lorZzCRxEw00USxkjP37uBestdx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QAISkIAEJCABCUhAAhJojoC6tDl+5paABCQgAQlIQAISkIAEJCCB5gioS5vjZ24JSEACEpCABCQgAQlIQAISaI6AurQ5fuaWgAQkIAEJSEACEpCABCQggeYIqEub42duCUhAAhKQgAQkIAEJSEACEmiOgLq0OX7mloAEJCABCUhAAhKQgAQkIIHmCKhLm+NnbglIQAISkIAEJCABCUhAAhJojoC6tDl+5paABCQgAQlIQAISkIAEJCCB5gioS5vjZ24JSEACEpCABCQgAQlIQAISaI6AurQ5fuaWgAQkIAEJSEACEpCABCQggeYIqEub42duCUhAAhKQgAQkIAEJSEACEmiOgLq0OX7mloAEJCABCUhAAhKQgAQkIIHmCKhLm+NnbglIQAISkIAEJCABCUhAAhJojoC6tDl+5paABCQgAQlIQAISkIAEJCCB5gioS5vjZ24JSEACEpCABCQgAQlIQAISaI6AurQ5fuaWgAQkIAEJSEACEpCABCQggeYIqEub42duCUhAAhKQgAQkIAEJSEACEmiOgLq0OX7mloAEJCABCUhAAhKQgAQkIIHmCKhLm+NnbglIQAISkIAEJCABCUhAAhJojoC6tDl+5paABCQgAQlIQAISkIAEJCCB5gioS5vjZ24JSEACEpCABCQgAQlIQAISaI6AurQ5fuaWgAQkIAEJSEACEpCABCQggeYIqEub42duCUhAAhKQgAQkIAEJSEACEmiOgLq0OX7mloAEJCABCUhAAhKQgAQkIIHmCKhLm+NnbglIQAISkIAEJCABCUhAAhJojoC6tDl+5paABCQgAQlIQAISkIAEJCCB5gioS5vjZ24J9IvAt99+2698ZpKABCQgAQlIQAISkEAXEhi+C9tkkyTQwQRQpC+99NIXX3wx8sgjTznllMMNN1wHG6tpEpCABCQgAQlIQAISGAgCrfSXfv7fv4Gwugx1lJGGNg/AyHr//fcRpVTEK+EBqLElVZRubJTO4OimkprdkjFWXYg0qpkYIwEJSEACEuhWAq30l3788cdgGmWUUboVVp/aVUYa2tynLu5f4m+++SZlzIZTZGcGSjc2Smdw9HtJzW7ToJVGm8BarAQkIAEJSKADCbTSX9qBzdMkCUhAAhKQgAQkIAEJSEACEuhwAurSDu8gzZOABCQgAQlIQAISkIAEJNDlBNSlXd7BNk8CEpCABCQgAQlIQAISkECHE1CXdngHaZ4EJCABCUhAAhKQgAQkIIEuJ6Au7fIOtnkSkIAEJCABCUhAAhKQgAQ6nIC6tMM7SPMkIAEJSEACEpCABCQgAQl0OQF1aZd3sM2TgAQkIAEJSEACEpCABCTQ4QTUpR3eQZonAQlIQAISkIAEJCABCUigywmoS7u8g22eBCQgAQlIQAISkIAEJCCBDiegLu3wDtI8CUhAAhKQgAQkIAEJSEACXU5AXdrlHWzzJCABCUhAAhKQgAQkIAEJdDgBdWmHd5DmSUACEpCABCQgAQlIQAIS6HIC6tIu72CbJwEJSEACEpCABCQgAQlIoMMJqEs7vIM0TwISkIAEJCABCUhAAhKQQJcTUJd2eQfbPAlIQAISkIAEJCCB+gQ++uij5557rn4a35WABNpKQF3aVrwWLgEJSEACnUjgsssuG3bYYQ866KBONE6bJFCpfP755wzRFVZYoa0wFlhggZFGGqmtVTRT+J577gmE//znP80U0pDkq6++uvDCC4811ljzzDNPwYp22mkn0t91112kf/311wmvueaaBfP2Ndnmm29O+ffff39fM5peAqUjoC4tXZdpsAQkIAEJtIDA999/33wp11xzzTjjjPOb3/ym+aIsoQ6BocmZIdqSUVoH7ABUUaf2hm+Fec1DqN/MM844484775x++ul33HHHhiZFArQu/tVvv/2Wy++++47wp59+WjBvX5N99tlnqa6+5jW9BMpFQF1arv7S2nIT+Oabb5566ql77733oYceevPNN8vdGK2XQCMCaIm33367Uapyv//1119/8MEH3KSWuxkdb72cO76LSmwgP8pYf+aZZ/7+97/vwGYcffTRLDCec845O9A2TZJAawkM39riLE0CEqhJgJnUs84665JLLmHiMyWYZJJJfv7zny+zzDIpxoAEuonAOeecc+ihh84333zLL7/8YostNuKII3Zs61555RXcnqONNlpvFiI+Rx111PY1AZfLe++9N/744/dmAPEFbXjnnXfGHXdcVj/WKSq99dVXXz3zzDMTTjhh/apT+pqBmsbXjCzSBEzie3LssceuWVfByOra33//fWZJpptuuuGGG65gIX1NxmzjBBNMUJ98w9Z98cUXI488cl+rLpK+YdVMrzB4pphiit5KaxXDhpZ8+eWXDVcXNxxLxUlSHU2uOeSa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EpCABCQwNAhcdtllww477EEHHTQ0mmsry0fg888/Z4iusMIKRUw/77zzjjjiiCIpjz322NFHH33qqac+5ZRTiqR//fXXxxprrDXXXDMS77TTTlzeddddRfL2Nc3TTz9N4euuu25fM5peAhLoDgLq0u7oR1shAQlIQAJ9I/D999/3LUOt1Ndcc80444zzm9/8ptabxrWMwNDkzBAtMkq/+eabHXfc8aijjmqIm5R77rnn119//bOf/WyBBRZomJ4EOFc/+uijTz/9NBKjlrn89ttvi+TtaxqKpfDPPvusrxlNLwEJdAeB4bujGbZCAhKQgAQkMPAEuMX/4IMPuFkf+KqHVI1y7q27X3vttd133/3NN9+caqqpekuT4p944gkU5oorrnjOOeekyM4JTDfddM8999yoo47aOSZpiQQkMJAE1KUDSdu6hjSBL7744sYbb7ztttu4gRhhhBEmmmiiRRdddOKJJ+5kKGHzfffd9+qrr2IzNw2LLbbYPPPM08k2a5sE+kHglVdewe052mij9ZYX8cnt8ogjjthbgibj8Uq99957448/fp1yCtrwzjvvjDvuuCwBrVNUeuurr7565plnJpxwwvpVp/Q1AzWNrxlZpAmYhMds7LHHrllXwcjq2t9///23336bL7HhhhuuYCF9TcZ3+wQTTFCffMPW8a078sgjF6mahbgHHnggO0WL+FSjwC+//JJATbb4Kp999lmGAYOnSO25NC3By6/MNNNMkys5XdYf2MW5pQINSEACnUag0O9WpxmtPRIoHYGbb755o402Ouyww26//XZ++5m0vummm9jbxl4ddu90ZnOSzddddx0GP/zww//6179+/etfd7LNnUlSqzqZwHHHHTfppJNOMcUUY445JisbH3jggay1yJsDDjhg2mmnRbVyN7/UUktdeeWVKcEaa6yxySabcPm3v/1tsskmO/nkk3ldaaWVUoKHHnqImMknnxzNmSJXWWUVdvelhZGPPvro0ksvTe1IGiraYYcd0luRpb4NpNl+++2phbv2ffbZh7ooJzYEfvLJJ6nS6gAiatVVVx1jjDFmm202ssw+++xXXXVVJOPDToFbb711NhdzakTuu+++EYmPjktE0aGHHoqW2GKLLYivGUl8/SYgjClq7733fuSRR5j5wiRozzDDDOeff37UleN87bXXRnzutbfa2XsJWOTW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sH515JFHHmaYYeoURXULLrjgk08++fHHH9dJVuetDz74YMQRRxx11FF7S4Nif++998Yff/xsAnKRhYzZyGz49ddfx6Spp566tzQNSwAjzc+WGeEJJ5ywOjLFsJh53HHHZd1viskGeiszm6Y6jIeWDq3fEUwNMKnB2KvOHjEk6Ouo+/TTT9F7Y445Zl8zZm2gyXRBDkh1ZAvHZLb26nD1B4QB9uGHH0K4ZndXl2CMBCTQ+QTUpZ3fR1qYJ3DzzTcz8/3++++nNx5++OF//etfs80221577TXJJJOk+M4JVNv8xBNP3HTTTRdffHHH2tw59LREAu0j8NBDD7HLFAlBFUiXpZdeeoIJJkjVcTfMu48//jhLQLnLZyJp3nnnRTVFApyNr732GuFHH330mWeeQendddddKLGf/vSnkQC1c8kllxDeYIMN0t3zpZde+u6772644YYhgwnzVcB0FfoELTHVVFMxY5VVyPVtoPAbbriB7bLrr7/+gw8++NhjjyFLyD7FFFMsu+yyvak7ck3+3z8CEMCRWF8+kYypwG233faXv/wluzSPOuqo2Jq78MILn3TSSTPPPDMJ+Nt9993PPPNMVjWfc845f/nLX+aee26+4ohHQvz+978/7bTTsBMhsdBCC5FyxRVX/G+mH15OP/303/zmN8ETs7fYYos//vGPo48+erxdpIQTTzyRSh955JHoR2rMlr/rrrteccUV559//uyzz0789ttvj20Qoy2nnnoqU5zUBbEzzjgjVUqyv//975gB1WmnnZatqviWV1555WWWWeaQQw7JFp4N0+n8JL388suoJjqCnyT6gmnTIIyuvvDCC2eZZZYZZ5yRjqPfaRpIF1lkkemnnz6VQycCHBoIPyYx+XVLb9UJMFDvuOMO8pIGSTnrrLMylmIMXHvttaw5X2ONNcYZZ5xUAgMYAxiKCGNy/fOf/8QGct1555301M9+9jMmEaoj+YA0OSZp11VXXcUECpb84x//4COz2mqrJatSgGlcpk7WXnvtp59+mlFKvaussgrvkhF0L774YqxT4FNDM4MeUyHcDPT1M5hqNCABCQwugdpTg4Nrk7VLoA4BftF/97vfZUVpSsyt4XbbbffCCy+kmA4JlNHmDkGnGRJoKwH0A5oQtbnAAgugNt96661zzz337bffjkoRDEgX7tGRlPPPPz9Cgrveyy67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jYB0aRoV+YmACIiACIiACIiACIiACIiACDSKgHRpo0grHxEQAREQAREQAREQAREQAREQgTQC0qVpVOQnAiIgAiIgAiIgAiIgAiIgAiLQKALSpY0irXxEQAREQAREQAREQAREQAREQATSCEiXplGRnwiIgAiIgAiIgAiIgAiIgAiIQKMISJc2irTyEQEREAEREAEREAEREAEREAERSCMgXZpGRX4iIAIiIAIiIAIiIAIiIAIiIAKNIiBd2ijSykcEREAEREAEREAEREAEREAERCCNgHRpGhX5iYAIiIAIiIAIiIAIiIAIiIAINIqAdGmjSCsfERABERABERABERABERABERCBNALSpWlU5CcCIiACIiACIiACIiACIiACItAoAtKljSKtfERABERABERABERABERABERABNIISJemUZGfCIiACIiACIiACIiACIiACIhAowhIlzaKtPIRAREQAREQAREQAREQAREQARFIIyBdmkZFfiIgAiIgAiIgAiIgAiIgAiIgAo0iIF3aKNLKRwREQAREQAREQAREQAREQAREII2AdGkaFfmJgAiIgAiIgAiIgAiIgAiIgAg0ioB0aaNIKx8REAEREAEREAEREAEREAEREIE0AtKlaVTkJwIiIAIiIAIiIAIiIAIiIAIi0CgC0qWNIq18REAEREAEREAEREAEREAEREAE0ghIl6ZRkZ8IiIAIiIAIiIAIiIAIiIAIiECjCEiXNoq08hEBERABERABERABERABERABEUgjIF2aRkV+IiACIiACIiACIiACIiACIiACjSIgXdoo0spHBERABERABERABERABERABEQgjYB0aRoV+YmACIiACIiACIiACIiACIiACDSKgHRpo0grHxEQAREQAREQAREQAREQAREQgTQC0qVpVOQnAiIgAiIgAiIgAiIgAiIgAiLQKALSpY0irXxEQAREQAREQAREQAREQAREQATSCEiXplGRnwiIgAiIgAiIgAiIgAiIgAiIQKMISJc2irTyEQEREAEREAEREAEREAEREAERSCMgXZpGRX4iIAIiIAIiIAJpBH744YcPP/ww7Yr8mpSAmqxJG0bFEgER+C8B6dL/8tA3ERABERCBMYDAoEGDxhprrOOPP34MqGuZKn7zzTdHHHHEyy+/XCacc1988cViiy026aST9urVq2xgC9CvXz/CDxkyhK9ffvkl7vXXXz9n3EqDbbfddqT/0ksvVRqxGcL/8ssvdMhVV101uzBvvPHGgAED9ttvv1NPPfWBBx7IDszVSpss1kaxr2WzqyjAe++9R3tttNFGFcVSYBEQgXZMoGM7rpuqJgIiIAIiIAKlCIwePbrUpfz+999/PwPrXXfdtbgS99prrz366KNnmmmm+eefP7viV1555bPPPtujR4+NN944O6S/itzCWPfXX3/h8/fff+P+6aef/NXaOn7++WefV21TbkxqdMjsPnnwwQefcMIJYWEWXnjhu+++e4oppgg9Q3elTRZro9jXMOXWu+kVtBet1vqklIIIiED7ICBd2j7aUbUQAREQARFoAwJ//PHHyJEjUV9tkHers0QY3HPPPYcddljOlF544QVCXnPNNYssskjOKI0MdtZZZyHbpplmmkZm2rC8zj33XGo366yznnLKKT179nzmmWf69+//3HPP7bjjjrfeemupYjRzk80yyywsCJ9wwglLFV7+IiACYxoB6dIxrcVVXxGogMCvv/76yCOPvPjiiywGG2eccRhGLLXUUvmX8FWQ05gdVJzbvP0///zzzp07d+rUqVRJEJ8MoMcdd9xSAVrpj2Hqu+++yzB8kX7OMrAut0uXLiwKzSgSdjm05TvvvPPjjz9mBItd+u233/CZbLLJYv58HTFixNdff80jYuyxx05ezfZBHn/wwQfUnWJnh8y+2rVr11IBfv/9d+xyqSUnCjSYX6i0caGB7bdsmbObg3t//PHHL1Xs0P+2227r0KHDQw89NO200+KP1Rr79jzzzMPMAgBLYS/VZK1k3sroVi9+U7DSh3UM3dncqmuyMH25RUAEmpBA1u9WExZXRRIBEWgYgccee2yLLbZgbv7BBx98++23X3vtNQZG++67LxvG2HTUsGK0+4zEuW2bGDPU1FNPPd10000yySSsioxts0QussZ15plnRrWiapZbbrnBgwf7Aq+33npbbbUVXy+++GLMdJdeeil/V199dR/g1VdfxQchgeb0nmuuueaMM87ol7OyY3D55Zcn9ymnnJKM+vbt6y9ZlOwyEGa33XYjF8bxWD7Ji3RsG+eoUaN8pkkHIVdYYYV1112XTLmK5kmG8T5UZI455mCWCp/VVlsNUP7SjTfeSArIs9lnn32iiSbioUFJ/NVsx7ffftunTx/qTtzJJ5+cdG6++WaL8uabb1YKc++996aQr7/+Oim8//77RD/kkEP4ymzaxBNPTAtibLzpppvCIqGlWYZN1jQu9SL3Cy64gNqhk8NgoZvmwFDJRlASREtjutx5552ZvPNhcjbHRRddhLCEGN0PaF999ZVPIelAB2IgpXYmSi3A3HPPjTrlUqq5vlSTZTBP5pv0yYheaZN99NFH1GiXXXaxXHJyq6LJkrWQjwiIQHMSkC5tznZRqUSgjQnccsstRx11FDaQZDkYRrOb7uOPP05ekk+lBMS5UmK1DX/++efvscceiy66KIpujTXWeP755znXx0tTRvyrrLIKZwIhP9jat8kmmzDyXmuttc477zwrxhJLLGEKDUGF2lxooYWIwo5TLywffvjhoUOHstyA2QeLgn3y3nvvRZeabRaVSwps2iTxgw46aIYZZiDx3r17Dxs2zMKXLQPBEL3kgsBjFmmllVaiRkhT1nZuueWWlkjyLyqUAPYJhXQypPmg65ZZZhmzDYJoySWXNP/jjjvOzq3Zf//9TzzxRAQ2q3znnXfeUIeXSpM6svgCoUgBOMVn9913x6q54YYb2hbKOeecs1KYQMACjAWSHP/880++gpo2QraROJMIqM1NN92UVrYi0S4LLLAAunr66affeuutMajC8OyzzyZAqtKzWPSEPffcExl56KGHHnPMMTQ9sxIofD9bl6c5eLqiZj/99FPKs/baa9NPSKEUKPxBwfwgM4NhGHQd62CJiLgN/c2d2mTZzJOJxHyyo1faZNhyaS+WKlguebhV12SxWuirCIhA8xJgLUStPjym+dQqtaKnU0QaKnMDeh1jF4a29sHdgByryOKVV15ZccUVGWJmfDbffHPGf1Uk3pgohejM7YBzXVuzro1455132g8zUwO+FqgsPJF25mP6c/vtt0cVmA9KACscCz4xCZrPXXfdRRSEin1F3vD1vvvus69YI00z/O9//zMfy/ekk07iK+IHIUoAbHp2lb/IHlLYZ599zCdPGewUIsxuzBlZLPQDRkhSxrjnUy7lQLOR4+WXX14qgPdHexPys88+Mx9ojDfeeCzFJDsfBhMlYbbddlvz2WGHHfj61FNP8dUUyMorr2yXdtppJy4ZCvNhtotakOa7776LT0UwCW8c2HKJ+6233iJxPpBEo1r6iGd8UO/2lfN7+cqUhH3lL5eiOM6xPMR7xhysFu7WrRuayvvbCcMDBw40n7LNgTxm2S0melSlRaE7YXclXw/HJ550pEitLwAAQABJREFU0MpoaYoNK5rYd7ZkSHxiTVaWeayNYl/LRq+oyayNmA+ykpflRrDqmiyVjDxFQASakIDspf/8BOmPCIhAQODCCy9kOBt4pDgR1bfffnvKBXnlJiDOuVHVKyCWOsxoPnWOkMGQiMHTVsBiDZtgggnOPPNMv1cTOycjb8x61113nY8VOsz2+Oijj+LJTz5mUqQp5jhbAYsnVi/+WrCrrrrqk08+QdOaJrF00KXsu7v66qvtHsxfBiLONddclgjCiTWi1KKu6xo4Zwh5hoWT7Cxf/lIMRBdn/GY/Q1iLwbJnQrL4wsdFpbMumjRttW1FMH0ioQPlxjnJfu+lvYUFzUkYCoAUJ0fs4T4KK4Fnm202/zXpoOkR3rypJdyMiiWZkLHVyxnNATdmOkjH765kITENncwu1Ye+gV2X8BiEsd5jXU8NlvTMwzwZy/vkid76JsvgVl2T+fLLIQIi0PwEdO5R87eRSigCDSXABDm7SfNkydvz9Oq5PKBSw4hzKpYGe8bOlWX5K3v20C0YspA0TL4gRJGpYalsH2apl2Ri70IF2apd0mFpIosO0DCXXXYZbtbBcm4NMpVcSBODOX85cYf1tGEWiCW2R6I6OBEnfxlYPRsmQi58xZLpxU94tSZus3eZKvMJcjoUm0VZEsIiVeh5/5gDiyjajJXPLDcNL7Gwlq8s7+RvRTDDRLyb7YuhgPRMCMDLM1HONIRXrXgyAcGibsrmU4g5SI0N9ngi+DnqFosxgZlfiAXja0ZzWOeJLdz1S6OTScV8MOAvuOCCmKCZ7ED/kxrrwDGPx4Ilv+ZhnozlffJEb32TZXCrrsl8+eUQARFofgLSpc3fRiqhCDSUgF//VjZXVqOxyDAc1ZWN0rAA9k68Zn4DQX5DFpyx0oTD64ZhbPcZIURjdWRYjJ7kcBfrQjSTrdKMBSt1jC3H57ChcciQIaxyN6spRyWxMBULG2IV7UHibCy01BCfOFjIGkvcvpKFraLMWYZSh82mJl4TT3om6SQFFfIPXTp8+PAMXWpxOZEoVhKTjsTFvyKYsXTsawYTuwE5CSkWMdklYgGYpzjjjDPYuYqsZZKCFNhw6+3hPnBG1qhZgjHx4QPjIF9vlg/9k24OPeazwQYbYJBnb+qgQYMoDBbUZMiYTx7msSjh1zzRm7PJwlrILQIi0MwEpEubuXVUNhFoAwK86Dx/rv7wzPxRFLIKAkgUVvpVEVFRsgmYQgjD2KFHqCPMmPhj+rMdpGEY3LZrNOZpX1nK+Pjjj2PCQpcizPjYi0CQLrYp0dY6EtikCwcCc7pSMinbf4h/zjKYITeZTv18zEbHdtOYBjN7oCnMUrlbXGyqsQCxuPlhxtKxrxlMrMxsPY1FNFNtzNN/5VBcju3lzCoOZ2IfMk3D5BcL8pO6NCNrTksGGttE7dAsS5xFqhkrn8mXs5GWXXbZxRdf3BeGLFCn6FKkch5dmpO5Tz/myBm92ZosVgt9FQERaGYC0qXN3Doqmwi0AQEbfOTMmFGR7KU5WcWCYa7BqhbzLPU1ttaxVDD5V0ogtmSdpbYY+jBvmqaib7N2EeEx1VRT+ZRZUMBaXIyE4aZKfxUHuoWTdRGlfNj+h0/37t1ZL4p0wQZL4n4Bp21l5H0evCEjTOHKK69EwbLZFbNYdWUIU6ufG1Mha1nZMctbNH0uSH0OrKLHUmvvmXSYoRKthRgL7YRPP/00gb0ZMz/MZBbZPpyjS4DY8hAskCaMS8XlwCGWH3M8kp0AZMHoJKXCp/pTO066ou6hLrVF3anh8YQqGy/ZNxHqUvxZScHfsu9QtWRzMrfAyb85ozdbkyUrIh8REIGmJSBd2rRNo4KJQNsQ4Kz/nBkzaI6Np3NGbEAwWwfIyZkNyKu6LFiimVOXwlmLeKuDXDYWCyARQn6sz3s4UCbbbLMNJw8Rl7NMOdwLT382DyKKA2bZ2uffNWJmMTOuWnbzzTcfZ/ZyqA8H4bCI1zzRopx2g2DD5OWXl3MkEicAY48luuVIYIrE0UpkjS7FM08ZLIvG/6X8nP90xx13cNqwNw/akUUUPrs8iBxOe8JmyPJmmFhgbIaoXM6a4n2e5pMfZnZ2yatsu2VegCkGbkO/zfjYY49lW28ysPexNwCFb5HhzSWVLhthOo8dxXDjrGCb16PXnXzyyT6XpIMSEpLS0ql4a5EFYPICUy1ulo4noyR9cjJPRjSfnNGbrclKVUf+IiACTUhA5/E2YaOoSCLQlgR4bzuHheQpAcvY8gRTmFQC4pyKpcGerA7gPN4DDzwQOxhGzl122YXlnXy1YrCNEI201157IVeQBDfccAM6E1GKcOXgGQtjx7Rw6bTTTvOrgjEZ2QrVUJeiPTiFyC/iJTpn/GB2Y4aCs5Guv/56siAjyoNw9ZtO85ShwdB8drzYA0mP3Y8yo94pP6/0hB5rzvfbbz8fLNWBjZR3lnIJcdu/f/8nnniC04M4NQeZx6G4oS06J8zUXDI8kXm8qpQAvBOLpofzOuusw2tFWXedEctWXPOm1nPOOYcXtBx55JEoRlunTcdAZmfE9Zc222wzTld68sknmXSg3Xl1EBAwm9PZfJiYg8kpXpGCKGUvK9zoruxS5hny4osv8p4VdpnGwqd+zc+8ldGbqslS6yJPERCBJiXAL2WtPnV911ytCtmwdIpIQ2VuQPfgdE17eSl/cTcgxyqyaAfv1SxEZ24HnKvoXfmj1LUR7T2i7O1kY17Hji1Lhxj9Iy3CErLdNHyJC6qV945gLgvDMAq3H3jSNH/eiYpPjx49fLDvv//ecuFMUe+JA0spL6I0o5klgkbFGBuGKVsGe/EjJyqFsczkiFgKPVPdVb+/lNRGjhwZ29mI2GaNus8o4/2lhMFmGG6cBtHpp5/u45ojP0zjEL6/1A4H8gnaQVOoX+/DWutevXoh2PgwH8fxtvYGTkL6MDEHL0ElsDUW24yRsuzJt2OEYU7gPM3BinHfbUgKMUyOoAjLFsuXXhfapYkFLnzoWrGQ4VekLyH9K2e5lM3cjtryxYh9LRvdss7ZZLaIOvb+0rLduIomC4HILQIi0MwEOlA4e7y2/m/zL5xrfR3zp1BEGipz/vatOiQGE9aqWfTOnTtnb8GqOpfWR2RgwZC9VDpsHuOljtmGhVJxG+NflM5cdM51bc2GNSK6gtW8bDi0HXSxSrGfkG2obAjEuIq1its2FoCvDN9RmLzfxSuWZJgMH1QKhi8OAaYApnBigfOUIRalkV+RPXZeFGs4s487SpaKg4uRIqgyJgXYhesXOSdD1s+Hfb+s0LazrNgSzElCiL2MnfYIbyaVOJiK+vo5BQhgwPSLbPOUlkkK0kEP8+LZnD2Hm4I5TazKdDYiVpSdL1Irmbcyui9GaxyVNllr8lJcERCBhhGQLq0X6oaNqGpYAZW5hjBLJVUUXUr52ffFjjivon2NMB+x7C08CcZfah5HgTpzoTnXtcUL1Ih15aDE60SAF4GyLfaCCy7wBvNRo0ax75RjhLJP5a1TeZRsWQJqsrKIFEAECk1A5x4VuvlUeBGoI4Gll16arVMcIsqRm5wFwhEsGDR43yDL3uqY65iXtDiPeW2uGjcFAXZSDB48GDMp+4p54wtW8X79+rGHk12+TVE+FSJBQE2WQCIPEWhXBGQvrVdzFnGmX2WuV28I0i2QvTQotStc3yhcgY12QYsddpUaukWjhjCVVJIAy485x8h2OXJ2EctTCcOZRgcccEAysHyagYCarBlaQWUQgfoRkL20fmyVsgiIgAiIgAiIQJMSYIMoezU/+OCDBx54gL+sBGGFCKtCmrS4KpZzajL1AhFo3wSkS9t3+6p2IiACIiACIiACJQkgRKVFS9JpygtqsqZsFhVKBGpAQO8vrQFEJSECIiACIiACIiACIiACIiACIlA1AenSqtEpogiIgAiIgAiIgAiIgAiIgAiIQA0ISJfWAKKSEAEREAEREAEREAEREAEREAERqJqAdGnV6BRRBERABERABERABERABERABESgBgSkS2sAUUmIgAiIgAiIgAiIgAiIgAiIgAhUTUC6tGp0iigCIiACIiACIiACIiACIiACIlADAtKlNYCoJERABERABERABERABERABERABKomIF1aNTpFFAEREAEREAEREAEREAEREAERqAEB6dIaQFQSIiACIiACIiACIiACIiACIiACVROQLq0anSKKgAiIgAiIgAiIgAiIgAiIgAjUgIB0aQ0gKgkREAEREAEREAEREAEREAEREIGqCUiXVo1OEUVABERABERABERABERABERABGpAQLq0BhCVhAiIgAiIgAiIgAiIgAiIgAiIQNUEpEurRqeIIiACIiACIiACIiACIiACIiACNSAgXVoDiEpCBERABERABERABERABERABESgagLSpVWjU0QREAEREAEREAEREAEREAEREIEaEJAurQFEJSECIiACIiACIiACIiACIiACIlA1AenSqtEpogiIgAiIgAiIgAiIgAiIgAiIQA0ISJfWAKKSEAEREAEREAEREAEREAEREAERqJqAdGnV6BRRBERABERABERABERABERABESgBgSkS2sAUUmIgAiIgAiIgAiIgAiIgAiIgAhUTUC6tGp0iigCIiACIiACIiACIiACIiACIlADAtKlNYCoJERABERABERABERABERABERABKomIF1aNTpFFAEREAEREAEREAEREAEREAERqAEB6dIaQFQSIiACIiACIiACIiACIiACIiACVROQLq0anSKKgAiIgAiIgAiIgAiIgAiIgAjUgIB0aQ0gKgkREAEREAEREAEREAEREAEREIGqCUiXVo1OEUVABERABERABERABERABERABGpAQLq0BhCVhAiIgAiIgAiIgAiIgAiIgAiIQNUEpEurRqeIIiACIiACIiACIiACIiACIiACNSAgXVoDiEpCBERABERABERABERABERABESgagLSpVWjU0QREAEREAEREAEREAEREAEREIEaEJAurQFEJSECIiACIiACIiACIiACIiACIlA1AenSqtEpogiIgAiIgAiIgAiIgAiIgAiIQA0ISJfWAKKSEAEREAEREAEREAEREAEREAERqJqAdGnV6BRRBERABERABERABERABERABESgBgSkS2sAUUmIgAiIgAiIgAiIgAiIgAiIgAhUTUC6tGp0iigCIiACIiACIiACIiACIiACIlADAtKlNYCoJERABERABERABERABERABERABKomIF1aNTpFFAEREAERKCqBjz766Oyzz37uueeKWoEmKPegQYPGGmus448/vgnKklKEX375heKtuuqqKdcq8TrwwANJ55lnnqkkUvOGjWHZbrvtJp100pdeeql5S1y6ZH/++Sd38e233146iK6IgAgUiYB0aZFaS2UVAREQARFoKgKffvrphRde+NRTTzVVqRpWmNGjRzcsryoyonitL6El0vp0qih/naJYjSzxn3/++Ycffvjrr7/qlFcDkm1PTTOGP08a0FuURZMTkC5t8gZS8doVASZ333333RdeeOHVV1/96quv2lXdVBkRGCMJ/P3337///ju39hhZe1W68ATOOuusDz/8cN555y18TdpFBfQ8aRfNqEpUT6Bj9VEVUwREIDeBn376aeDAgXfeeScOH2mqqabadtttV1hhBe8jhwiIQJsQGDVq1HjjjTfOOOOUyv23337r2LHj2GOPXSpAK/2x+fz6668TTDBBRjo5y8BCzfHHH79Dhw4ZSVV6Ce2NYW2yySbLiPj555937ty5U6dOqWGwyH3wwQdTTDFFly5dUgPk9/zmm29IhLW1qVHASPVTL3nPkSNHTjjhhOOOO673STqgTZdI+mf40IjDhg3jwZ4RBuHx3XffwcGHSfr4S97x5Zdf/vjjjzPOOGNqmfOkUApL165dfS4xR3ajU9k//vgjtTyxdMKvdANilW2g7D7MNBA3Y5hsWTf5fv/999xf2bdYdjqpN2mqZ55blSJRkUr7WKyENCtNEN4L+ECPtdmhZyyWvopA0xKo7MauXzWYrrvnnnt69Oix8sor1y8XpSwCbULgiy++OPjggxm0xXJnqMHWrCFDhuy3336V/srGktJXERCB6giweIFdpoguojNGX3755aecckqfFINOrr711lusdUSUdu/efYEFFkAeWIC77rpr6NChuN944433339/kUUW4XZGcqy99toWAAV1xx134N5ss838WJz5qW+//XbzzTc3GYz70UcfZQEFg9RJJplkhhlmWHLJJUOFnF0GEn/44YfZLrvpppu+8sorb775JpNfRJ9uuulWWmmlUrKBGbH77rvvoYcemn322a2o/F1//fWfffZZ6oL+pDrLLLPMNttsQ7K77LILEFAp/EafcMIJG264oY9ijnPPPfe4447jgcZQGD4XX3zx/PPP78NQQVK4++67DfJMM810yimnbLDBBhbgtddeYwvoGmuscdFFF/koTz755EYbbbT99tsfffTReO62227sIaR2/fv3v+yyy3iiTjTRRNTuyiuvxOFjkcJ55533+uuvWzsee+yx/pI50G94Xn755eBCnyy66KL777//aqutFgajFn379n388cfRrgsvvPBOO+0UXk26ofHOO+/QgnvvvffgwYOHDx9OB9hzzz0POuggLwzI5ZprrmGx93XXXUcJgWNbIkG9xx570GdoMrBQkpNPPjkm7K+44gp+Pqyb0ZowIYyvdZ4UsrFQbJrmpptumnvuuXM2+tdffw2iBx54AAlEJ9lhhx3wufTSS6ndLLPMkkSED32Y5vvkk09oO/QY8xdTTz01OXpVnLMP07h0GHoUzTfttNMuvvjiqdmFnvS6Bx98kPWxtD7+zGgstdRS3GW47fbkduau91FAzXB0rrnmWmyxxfCkK9K+tPJ7773Hs4KHw5prrpnqSeDsW5Uedcstt8w555yzzTYb9eWWp0gIyCWWWII7i+ix58mKK644/fTT+4KZg65y/fXXE54ScrfSkzfeeGN7ZFFC+hhPKkLysKItll56adPhNBYEwgTvv//+zz77zFeTKHzFE8v5QgstFMtUX0WgYQTaWJcyRc3vIo8AbnvqvPPOOzes5spIBBpDgE7OsRk2qkjNkR8MfjkYx6RelacI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pOyG2/0jR//xYl8rq3Y5xXfhLm7LZV3PBdzJV7YE1n8iIAIiIAIiUFgCHUbbK9dqUYHhw6NlUV27dq1FYoVPo4g0VOYGdLthw4aNGDHCMurcuXP37t0bkGnrsyhc3yhcga2NClrs1new1BQaQYOjcb/72k0/y38KwDbRr79sOcfoPxdyfOEnlZ2r3adz445bMvT7bzq2ktq7ZDjEaKJJWqydrMhFLXNmb57PZx9F5zAhj4mijwiIgAiIgAgUn4D2lxa/DVUDERABERCB6gigCfkX+7Am1g7Xjfnn+Yp9NaZyk7H8oUpcmqLbv9e7VHKm7nQzOf7pIwIiIAIiIALthYDW8baXllQ9REAEREAEREAEREAEREAERKCYBKRLi9luKrUIiIAIiIAIiIAIiIAIiIAItBcC0qXtpSVVDxEQAREQAREQAREQAREQAREoJgHp0mK2m0otAiIgAiIgAiIgAiIgAiIgAu2FgHRpe2lJ1UMEREAEREAEREAEREAEREAEiklAurSY7aZSi4AIiIAIiIAIiIAIiIAIiEB7ISBd2l5aUvUQAREQAREQAREQAREQAREQgWISkC4tZrup1CIgAiIgAiIgAiIgAiIgAiLQXghIl7aXllQ9REAEREAEREAEREAEREAERKCYBKRLi9luKrUIiIAIiIAIiIAIiIAIiIAItBcC0qXtpSVVDxEQAREQAREQAREQAREQAREoJgHp0mK2m0otAiIgAiIgAiIgAiIgAiIgAu2FgHRpe2lJ1UMEREAEREAEREAEREAEREAEiklAurSY7aZSi4AIiIAIiIAIiIAIiIAIiEB7ISBd2l5aUvUQAREQAREQAREQAREQAREQgWISkC4tZrup1CIgAiIgAiIgAiIgAiIgAiLQXghIl7aXllQ9REAEREAEREAEREAEREAERKCYBKRLi9luKrUIiIAIiIAIiIAIiIAIiIAItBcC0qXtpSVVDxEQAREQAREQAREQAREQAREoJgHp0mK2m0otAiIgAiIgAiIgAiIgAiIgAu2FgHRpe2lJ1UMEREAEREAEREAEREAEREAEiklAurSY7aZSi4AIiIAIiIAIiIAIiECjCPz999+ffPLJ999/36gMlc8YR0C6dIxrclVYBERABERg0KBBY4011vHHHy8UVRNocoa//PILTbzqqqtWXUGLeOCBB5LOM88808p0miR6DMt222036aSTvvTSS01SvIqKEatLRXHzB1544YXHG2+8/OEbHLImEPIkcs4550w00UQzzjjjgAED8tTxyy+/pGutv/76Frhfv358HTJkSJ64lYZ57733SHyjjTaqNKLCNxsB6dJmaxGVRwREQAREoBEERo8e3fps7r///s6dOx988MGtT6qIKdSEYf0qTvFaX0JLpPXp1K+alaZsNbJYP//88w8//PDXX39VmkiThA/rUqciNSCLVpa8JiXMTuTPP/9kguaPP/7YeOONEep5Coxxla71008/WWCkb/16Gh2YxOnMeQqmMM1MoGMzF05lEwEREAERKC6Byy67bIEFFph33nk7dOhQ3Fpkl5yB2siRIxlyZQfTVRFoTgJnnXXWCSecMM000zRn8VSqJiHw9ttvozBXW2216667rkmKFBZjlllm+fDDDyeccMLQU+4iEpC9tIitpjKLgAiIQAEIPPTQQ3vvvfcWW2xxxRVXDB06tJlL/Pnnn/t5/dRyIj5///331Es18cS28M0332QnlbMMpENq2UlVepW6k3t2rGyGGDTefffd7777LjuRPFezK/jrr7+WTSQPyd9++61sOrEAWJxYuxjzjH1NNnTSJxaFryQLvVI9ME8KpbB07dp1pplmGnfccZOZZjc6lS1VnmRS3geqefpA65vY51iRI7vKJMUM1GeffZaRZrH6ealekayg3Q6TTTZZ8lIrqzxixAj6NokkU87vM84449CNu3XrlhqlrbpTamHkmU2gWXQpnebaa6998MEHs4urqyIgAiIgAkUhYGbSYcOGXXnllVtuueX//ve/u+66K1v+Nb5q55577tRTTz3ddNNNMskkrE97+eWXwzIw4j/66KNnnnlmFusyJltuueUGDx7sA6y33npbbbUVXy+++GIsTpdeeil/V199dR/g1VdfxWfaaacNx+Jrrrkme7Q8hzfeeGP55Zcn9ymnnJKM+vbt6y9ZOtllIMxuu+1GLvyMHnbYYeRFOrata9SoUb4kMce2225LlHfeeSf0ZycYnqY/33//fdyHHHLI66+/vtRSS0088cQQmHXWWW+66aYwirmzGX777bd9+vShgrPPPvvkk09OHW+++WafyGuvvUZGO+20k/fB8eSTT+J5+OGHm2fOCl500UXzzz8/W+BoUGZDvvrqqzBN3GVJEgYFCAcYks4SSyxx+eWXxxKJfd1www3nmWce2nebbbbp3r07WRP3uOOOIy8fcv/996c6HBhz0kknMXrefvvt7VLZpicYczrEJVno0QqgCJs1TwrZWJg5mmOOOWhl8srZ6F9//TUb+WhK7ggMaLTmBRdcwL3zwQcf+CrHHNDo378/e33pRVNMMUXPnj133nnnF1980QerVRP7BM1Rw37+xRdfrLjiitxZ008/PbU49NBDWdoaZlesfp7dK8J64eb23GCDDXDwAKe30CctQHaVY4kkv9544408Dbp06ULf5nbjnuUhZsHefPNNun3+Z+lHH31EwXbZZReLnrM7XXXVVdy8nTp14sm2xx57DB8+nG7McuVkUeXTOAK2oLwmf/kN4FNRUkxNPfLII3QC7nZ+mK+55pqKojdz4CpotHl1VOYGNAGDHh649sHdgBxrkkXh+kbhCmzNVNBil+pjaDYe7LEPY9NjjjmG0y8Y1ZWK2AAad955Jz+0qDjE87rrrouiW2uttfDhgBPOgLECUEJ+m/BksMIOUsa4GJfGHntsZJgFOPnkk+1YHQY3DN3QtEzYd+zYEeVgAc4880z7Ob/11lvNh01QBFhmmWXs69133z3BBBOw/AytctBBBy277LKE79Wrl384lC0D6bDji1jEpfCoIwZYiB98qJflkvxrlUUThpd69+5NLMaaeL711lu4F1xwQbQQi7FRL4hwWFH45557zmLlYUhF0PwkhX479dRTd999d4abfOXEKUvkhRde4Cuj3rAkNklNRcwzTwWPPPJI0kEwMLpF8yDkGPLis/LKK1sieUh+/PHHM8wwA7EWX3xxplFWWWUV3AbzqaeeCkvo3SCiS9ABkCvMKeywww5TTTUVsWhQHwZPfOg//OUqKXOpbNMThm5JFOrCOJsxNyN4vm6yySaWcp4UymIxttameRodqzh3DcWYb775KNLSSy9Nr5hrrrnwiXUnX30cBxxwAAGYNUCxH3vssUzNEAtZyzIKC1aTJg5zNHdN+jlNzMFXNBx9Y8899+T8HuvSiHOfY7H6edle4etlDhZ7c/vTgghIHnQPPPAA/mWrTFchir8B7S7w9xHdgKvcXMzanHjiiSZBgWzPHyYyKnqWWtddY401rMD5uxMTDTx8tt56a6aTmC6hSLFnUQyFvtabgKthBhWNqLDa09H51QyHLExd1LA8bZtURTTatqg+d5XZo6if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993Xcc8n748k6OC3XZcp/hOYTacTdHKdJ/+Pp/9SMosfo42smGcnntSHlUMEREAEREAExhwC2l865rS1aioCIiACIpBJYJLJ3AJLpITgjab88x9OMPphhDtyt2gFb0yUEoaFvhmfkllM/O+i4ozouiQCIiACIiAC7ZSAdGk7bVhVSwREQAREoE4EMJO+9pzbcg+39uZ1ykHJioAIiIAIiMCYRkC6dExrcdVXBERABESgdQROuMxh9uTVpvqIgAiIgAiIgAjUiIB0aY1AKhkREAEREIExhECpvaNjSPVVTREQAREQARGoAwGdx1sHqEpSBERABERABERABERABERABEQgNwHp0tyoFFAEREAEREAEREAEREAEREAERKAOBKRL6wBVSYqACIiACIiACIiACIiACIiACOQmUMv9pZNOqreu/Qu+iDRU5n/br26uccYZx6cdur1nczoK1zcKV2Br94IWu06dVjTqBFbJioAIiIAIiEATEugwevToJiyWiiQC7ZXA33///cUXX/z000+dOnWaZpppxhpLaxbaa1OrXiIgAiIgAiIgAiIgAnkJSJfmJaVwIiACIiACIiACIiACIiACIiAC9SAgW009qCpNERABERABERABERABERABERCBvASkS/OSUjgREAEREAEREAEREAEREAEREIF6EJAurQdVpSkCIiACIiACIiACIiACIiACIpCXgHRpXlIKJwIiIAIiIAIiIAIiIAIiIAIiUA8C/wdEUdu3KGN4ggAAAABJRU5ErkJggg==" width="100%" /></p> <p>Of the many possible specifications, there are only three that commonly used. They select between aggregation variants:</p> <ul> <li><p>Recycled: <code>BETWEEN UNBOUND PRECEEDING AND UNBOUND FOLLOWING</code></p></li> <li><p>Cumulative: <code>BETWEEN UNBOUND PRECEEDING AND CURRENT ROW</code></p></li> <li><p>Rolling: <code>BETWEEN 2 PRECEEDING AND 2 FOLLOWING</code></p></li> </ul> <p>dplyr generates the frame clause based on whether your using a recycled aggregate or a cumulative aggregate.</p></li> </ul> <p>To see how individual window functions are translated to SQL, we can again use <code>translate_sql()</code>:</p> <div class="sourceCode" id="cb12"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb12-1"><a href="#cb12-1"></a><span class="kw">translate_sql</span>(<span class="kw">mean</span>(G))</span> <span id="cb12-2"><a href="#cb12-2"></a><span class="co">#> <SQL> AVG(`G`) OVER ()</span></span> <span id="cb12-3"><a href="#cb12-3"></a><span class="kw">translate_sql</span>(<span class="kw">rank</span>(G))</span> <span id="cb12-4"><a href="#cb12-4"></a><span class="co">#> <SQL> RANK() OVER (ORDER BY `G`)</span></span> <span id="cb12-5"><a href="#cb12-5"></a><span class="kw">translate_sql</span>(<span class="kw">ntile</span>(G, <span class="dv">2</span>))</span> <span id="cb12-6"><a href="#cb12-6"></a><span class="co">#> <SQL> NTILE(2) OVER (ORDER BY `G`)</span></span> <span id="cb12-7"><a href="#cb12-7"></a><span class="kw">translate_sql</span>(<span class="kw">lag</span>(G))</span> <span id="cb12-8"><a href="#cb12-8"></a><span class="co">#> <SQL> LAG(`G`, 1, NULL) OVER ()</span></span></code></pre></div> <p>If the tbl has been grouped or arranged previously in the pipeline, then dplyr will use that information to set the “partition by” and “order by” clauses. For interactive exploration, you can achieve the same effect by setting the <code>vars_group</code> and <code>vars_order</code> arguments to <code>translate_sql()</code></p> <div class="sourceCode" id="cb13"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb13-1"><a href="#cb13-1"></a><span class="kw">translate_sql</span>(<span class="kw">cummean</span>(G), <span class="dt">vars_order =</span> <span class="st">"year"</span>)</span> <span id="cb13-2"><a href="#cb13-2"></a><span class="co">#> <SQL> AVG(`G`) OVER (ORDER BY `year` ROWS UNBOUNDED PRECEDING)</span></span> <span id="cb13-3"><a href="#cb13-3"></a><span class="kw">translate_sql</span>(<span class="kw">rank</span>(), <span class="dt">vars_group =</span> <span class="st">"ID"</span>)</span> <span id="cb13-4"><a href="#cb13-4"></a><span class="co">#> <SQL> RANK() OVER (PARTITION BY `ID`)</span></span></code></pre></div> <p>There are some challenges when translating window functions between R and SQL, because dplyr tries to keep the window functions as similar as possible to both the existing R analogues and to the SQL functions. This means that there are three ways to control the order clause depending on which window function you’re using:</p> <ul> <li><p>For ranking functions, the ordering variable is the first argument: <code>rank(x)</code>, <code>ntile(y, 2)</code>. If omitted or <code>NULL</code>, will use the default ordering associated with the tbl (as set by <code>arrange()</code>).</p></li> <li><p>Accumulating aggregates only take a single argument (the vector to aggregate). To control ordering, use <code>order_by()</code>.</p></li> <li><p>Aggregates implemented in dplyr (<code>lead</code>, <code>lag</code>, <code>nth_value</code>, <code>first_value</code>, <code>last_value</code>) have an <code>order_by</code> argument. Supply it to override the default ordering.</p></li> </ul> <p>The three options are illustrated in the snippet below:</p> <div class="sourceCode" id="cb14"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb14-1"><a href="#cb14-1"></a><span class="kw">mutate</span>(players,</span> <span id="cb14-2"><a href="#cb14-2"></a> <span class="kw">min_rank</span>(yearID),</span> <span id="cb14-3"><a href="#cb14-3"></a> <span class="kw">order_by</span>(yearID, <span class="kw">cumsum</span>(G)),</span> <span id="cb14-4"><a href="#cb14-4"></a> <span class="kw">lead</span>(G, <span class="dt">order_by =</span> yearID)</span> <span id="cb14-5"><a href="#cb14-5"></a>)</span></code></pre></div> <p>Currently there is no way to order by multiple variables, except by setting the default ordering with <code>arrange()</code>. This will be added in a future release.</p> </div> <!-- code folding --> <!-- dynamically load mathjax for compatibility with self-contained --> <script> (function () { var script = document.createElement("script"); script.type = "text/javascript"; script.src = "https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"; document.getElementsByTagName("head")[0].appendChild(script); })(); </script> </body> </html>