<p><div><div><div><div data-show-faces="false" data-height="21" data-width="100" data-layout="button_count" data-send="true" data-href="https://www.r-bloggers.com/adding-zero-catches/"></div></div><div></div></div><div></div></div>
<div>
(This article was first published on <strong><a href="http://derekogle.com/fishR/2018-04-19-Adding-Zero-Catches"> fishR Blog</a></strong>, and kindly contributed to <a rel="nofollow" href="https://www.r-bloggers.com/">R-bloggers)</a> </div>
<hr>
<h2>Introduction</h2>
<p>Much of my work is with undergraduates who are first learning to analyze fisheries data. A common “learning opportunity” occurs when students are asked to compute the mean catch (or CPE), along with a standard deviation (SD), across multiple gear sets for each species. The learning opportunity occurs because some species will invariably not be caught in some gear sets. When the students summarize the number of fish caught for each species in each gear set those species not caught in a particular gear set will not “appear” in their data. Thus, when calculating the mean, the student will get the correct numerator (sum of catch across all gear sets) but not denominator (they use number of catches summed rather than total number of gear sets), which inflates (over-estimates) the mean catch and (usually) deflates (under-estimates) the SD of catches. Once confronted with this issue, they easily realize how to correct the mean calculation, but calculating the standard deviation is still an issue. These problems are exacerbated when using software to compute these summary statistics across many individual gear sets.</p>
<p>In software, the “trick” is to add a zero for each species not caught in a specific gear set that was caught in at least one of all of the gear sets. For example, if Bluegill were caught in at least one gear set but not in the third gear set, then a zero must be added as the catch of Bluegill in the third gear set. The <code>addZeroCatch()</code> function in the <code>FSA</code> package was an attempt to efficiently add these zeroes. This function has proven useful over the years, but I have become dissatisfied with its clunkiness. Additionally, I recently became aware of the <code>complete()</code> function in the <code>tidyr</code> package which holds promise for handling the same task. In this post, I explore the use of <code>complete()</code> for handling this issue.</p>
<p>This post requires the <code>dplyr</code> and <code>tidyr</code> packages. It also uses <code>FSA</code> behind the scenes.</p>
<figure>
<pre><code data-lang="r"><span>library</span><span>(</span><span>FSA</span><span>)</span><span> </span><span># for mapvalues()</span><span>
</span><span>library</span><span>(</span><span>dplyr</span><span>)</span><span> </span><span># for %>%, group_by(), summarize(), mutate(), right_join()</span><span>
</span><span>library</span><span>(</span><span>tidyr</span><span>)</span><span> </span><span># for complete(), nesting()</span></code></pre>
</figure>
<p></p>
<hr>
<h2>Example 1 – Very Simple Data</h2>
<p>In this first example, the data consists of <code>species</code> and <code>length</code> recorded for each captured fish organized by the gear set identification number (<code>ID</code>) and held in the <code>fishdat</code> data.frame.</p>
<figure>
<pre><code data-lang="r"><span>head</span><span>(</span><span>fishdat</span><span>)</span></code></pre>
</figure>
<figure>
<pre><code data-lang="text">##   ID species  tl
## 1  1     BLG 148
## 2  1     BLG 153
## 3  1     BLG 147
## 4  1     BLG 149
## 5  1     BLG 144
## 6  1     BLG 145</code></pre>
</figure>
<p>The catch of each species in each gear set may be found using <code>group_by()</code> and <code>summarize()</code> with <code>n()</code>. Note that <code>as.data.frame()</code> is used simply to remove the <code>tibble</code> structure returned by <code>group_by()</code>.<sup><a rel="nofollow" href="http://derekogle.com/fishR/2018-04-19-Adding-Zero-Catches#fn:tibbleannoyance" target="_blank">1</a></sup></p>
<figure>
<pre><code data-lang="r"><span>catch</span><span> </span><span>&lt;-</span><span> </span><span>fishdat</span><span> </span><span>%>%</span><span>
</span><span>group_by</span><span>(</span><span>ID</span><span>,</span><span>species</span><span>)</span><span> </span><span>%>%</span><span>
</span><span>summarize</span><span>(</span><span>num</span><span>=</span><span>n</span><span>())</span><span> </span><span>%>%</span><span>
</span><span>as.data.frame</span><span>()</span><span>
</span><span>catch</span></code></pre>
</figure>
<figure>
<pre><code data-lang="text">##    ID species num
## 1   1     BLG  10
## 2   1     LMB   5
## 3   1     YEP   5
## 4   2     LMB   9
## 5   2     YEP   7
## 6   3     BLG  12
## 7   3     YEP   7
## 8   4     BLG   1
## 9   4     LMB  11
## 10  4     YEP  11
## 11  5     BLG   9</code></pre>
</figure>
<p>From this it is seen that three species (“BLG”, “LMB”, and “YEP”) were captured in all nets, but that “BLG” were not captured in “ID=2”, “LMB” were not captured in “ID=3”, and “LMB” and “YEP” were not captured in “ID=5”. The sample size, mean, and SD of catches per species from these data may be found by again using <code>group_by()</code> and <code>summarize()</code>. However, note that these calculations are <strong>INCORRECT</strong> because they do not include the zero catches of “BLG” in “ID=2”, “LMB” in “ID=3”, and “LMB” and “YEP” in “ID=5”. The problem is most evident in the sample sizes, which should be five (gear sets) for each species.</p>
<figure>
<pre><code data-lang="r"><span>## Example of INCORRECT summaries because not using zeroes</span><span>
</span><span>catch</span><span> </span><span>%>%</span><span> </span><span>group_by</span><span>(</span><span>species</span><span>)</span><span> </span><span>%>%</span><span>
</span><span>summarize</span><span>(</span><span>n</span><span>=</span><span>n</span><span>(),</span><span>mn</span><span>=</span><span>mean</span><span>(</span><span>num</span><span>),</span><span>sd</span><span>=</span><span>sd</span><span>(</span><span>num</span><span>))</span><span> </span><span>%>%</span><span>
</span><span>as.data.frame</span><span>()</span></code></pre>
</figure>
<figure>
<pre><code data-lang="text">##   species n       mn       sd
## 1     BLG 4 8.000000 4.830459
## 2     LMB 3 8.333333 3.055050
## 3     YEP 4 7.500000 2.516611</code></pre>
</figure>
<p>The <code>complete()</code> function can be used to add rows to a data.frame for variables (or combinations of variables) that should be present in the data.frame (relative to other values that are present) but are not. The <code>complete()</code> function takes a data.frame as its first argument (but will be “piped” in below with <code>%>%</code>) and the variable or variables that will be used to identify which items are missing. For example, with these data, a zero should be added to <code>num</code> for missing combinations defined by <code>ID</code> and <code>species</code>.</p>
<figure>
<pre><code data-lang="r"><span>## Example of default complete ... see below to add zeroes, not NAs</span><span>
</span><span>catch</span><span> </span><span>%>%</span><span> </span><span>complete</span><span>(</span><span>ID</span><span>,</span><span>species</span><span>)</span><span> </span><span>%>%</span><span>
</span><span>as.data.frame</span><span>()</span></code></pre>
</figure>
<figure>
<pre><code data-lang="text">##    ID species num
## 1   1     BLG  10
## 2   1     LMB   5
## 3   1     YEP   5
## 4   2     BLG  NA
## 5   2     LMB   9
## 6   2     YEP   7
## 7   3     BLG  12
## 8   3     LMB  NA
## 9   3     YEP   7
## 10  4     BLG   1
## 11  4     LMB  11
## 12  4     YEP  11
## 13  5     BLG   9
## 14  5     LMB  NA
## 15  5     YEP  NA</code></pre>
</figure>
<p>From this result, it is seen that <code>complete()</code> added a row for “BLG” in “ID=2”, “LMB” in “ID=3”, and “LMB” and “YEP” in “ID=5”, as we had hoped. However, <code>complete()</code> adds <code>NA</code>s by default. The value to add can be changed with <code>fill=</code>, which takes a list that includes the name of the variable to which the <code>NA</code>s were added (<code>num</code> in this case) set equal to the value to be added (<code>0</code> in this case).</p>
<figure>
<pre><code data-lang="r"><span>catch</span><span> </span><span>&lt;-</span><span> </span><span>catch</span><span> </span><span>%>%</span><span>
</span><span>complete</span><span>(</span><span>ID</span><span>,</span><span>species</span><span>,</span><span>fill</span><span>=</span><span>list</span><span>(</span><span>num</span><span>=</span><span>0</span><span>))</span><span> </span><span>%>%</span><span>
</span><span>as.data.frame</span><span>()</span><span>
</span><span>catch</span></code></pre>
</figure>
<figure>
<pre><code data-lang="text">##    ID species num
## 1   1     BLG  10
## 2   1     LMB   5
## 3   1     YEP   5
## 4   2     BLG   0
## 5   2     LMB   9
## 6   2     YEP   7
## 7   3     BLG  12
## 8   3     LMB   0
## 9   3     YEP   7
## 10  4     BLG   1
## 11  4     LMB  11
## 12  4     YEP  11
## 13  5     BLG   9
## 14  5     LMB   0
## 15  5     YEP   0</code></pre>
</figure>
<p>These correct catch data can then be summarized as above to show the correct sample size, mean, and SD of catches per species.</p>
<figure>
<pre><code data-lang="r"><span>catch</span><span> </span><span>%>%</span><span> </span><span>group_by</span><span>(</span><span>species</span><span>)</span><span> </span><span>%>%</span><span>
</span><span>summarize</span><span>(</span><span>n</span><span>=</span><span>n</span><span>(),</span><span>mn</span><span>=</span><span>mean</span><span>(</span><span>num</span><span>),</span><span>sd</span><span>=</span><span>sd</span><span>(</span><span>num</span><span>))</span><span> </span><span>%>%</span><span>
</span><span>as.data.frame</span><span>()</span></code></pre>
</figure>
<figure>
<pre><code data-lang="text">##   species n  mn       sd
## 1     BLG 5 6.4 5.504544
## 2     LMB 5 5.0 5.049752
## 3     YEP 5 6.0 4.000000</code></pre>
</figure>
<p></p>
<p></p>
<hr>
<h2>Example 2 – Multiple Values to Receive Zeroes</h2>
<p>Suppose that the fish data included a column that indicates whether the fish was marked and returned to the waterbody or not.</p>
<figure>
<pre><code data-lang="r"><span>head</span><span>(</span><span>fishdat2</span><span>)</span></code></pre>
</figure>
<figure>
<pre><code data-lang="text">##   ID species  tl marked
## 1  1     BLG 148    YES
## 2  1     BLG 153    YES
## 3  1     BLG 147     no
## 4  1     BLG 149     no
## 5  1     BLG 144     no
## 6  1     BLG 145     no</code></pre>
</figure>
<p>The catch and number of fish marked and returned per gear set ID and species may again be computed with <code>group_by()</code> and <code>summarize()</code>. Note, however, the use of <code>ifelse()</code> to use a <code>1</code> if the fish was marked and a <code>0</code> if it was not. Summing these values returns the number of fish that were marked. Giving this data.frame to <code>complete()</code> as before will add zeroes for both the <code>num</code> and <code>nmarked</code> variables as long as both are included in the list given to <code>fill=</code>.</p>
<figure>
<pre><code data-lang="r"><span>catch2</span><span> </span><span>&lt;-</span><span> </span><span>fishdat2</span><span> </span><span>%>%</span><span>
</span><span>group_by</span><span>(</span><span>ID</span><span>,</span><span>species</span><span>)</span><span> </span><span>%>%</span><span>
</span><span>summarize</span><span>(</span><span>num</span><span>=</span><span>n</span><span>(),</span><span>
</span><span>nmarked</span><span>=</span><span>sum</span><span>(</span><span>ifelse</span><span>(</span><span>marked</span><span>==</span><span>&quot;YES&quot;</span><span>,</span><span>1</span><span>,</span><span>0</span><span>)))</span><span> </span><span>%>%</span><span>
</span><span>complete</span><span>(</span><span>ID</span><span>,</span><span>species</span><span>,</span><span>fill</span><span>=</span><span>list</span><span>(</span><span>num</span><span>=</span><span>0</span><span>,</span><span>nmarked</span><span>=</span><span>0</span><span>))</span><span> </span><span>%>%</span><span>
</span><span>as.data.frame</span><span>()</span><span>
</span><span>catch2</span></code></pre>
</figure>
<figure>
<pre><code data-lang="text">##    ID species num nmarked
## 1   1     BLG  10       2
## 2   1     LMB   5       2
## 3   1     YEP   5       3
## 4   2     BLG   0       0
## 5   2     LMB   9       6
## 6   2     YEP   7       2
## 7   3     BLG  12       4
## 8   3     LMB   0       0
## 9   3     YEP   7       6
## 10  4     BLG   1       0
## 11  4     LMB  11       5
## 12  4     YEP  11       8
## 13  5     BLG   9       4
## 14  5     LMB   0       0
## 15  5     YEP   0       0</code></pre>
</figure>
<p></p>
<p></p>
<hr>
<h2>Example 3 – More Information that Does Not Get Zeroes</h2>
<p>Suppose that a data.frame called <code>geardat</code> contains information specific to each gear set.</p>
<figure>
<pre><code data-lang="r"><span>geardat</span></code></pre>
</figure>
<figure>
<pre><code data-lang="text">##   ID mon year  lake run effort
## 1  1 May 2018 round   1   1.34
## 2  2 May 2018 round   2   1.87
## 3  3 May 2018 round   3   1.56
## 4  4 May 2018  twin   1   0.92
## 5  5 May 2018  twin   2   0.67</code></pre>
</figure>
<p>And, for the purposes of this example, let’s suppose that we have summarized catch data WITHOUT the zeroes having been added.</p>
<figure>
<pre><code data-lang="r"><span>catch3</span><span> </span><span>&lt;-</span><span> </span><span>fishdat2</span><span> </span><span>%>%</span><span>
</span><span>group_by</span><span>(</span><span>ID</span><span>,</span><span>species</span><span>)</span><span> </span><span>%>%</span><span>
</span><span>summarize</span><span>(</span><span>num</span><span>=</span><span>n</span><span>(),</span><span>
</span><span>nmarked</span><span>=</span><span>sum</span><span>(</span><span>ifelse</span><span>(</span><span>marked</span><span>==</span><span>&quot;YES&quot;</span><span>,</span><span>1</span><span>,</span><span>0</span><span>)))</span><span> </span><span>%>%</span><span>
</span><span>as.data.frame</span><span>()</span><span>
</span><span>catch3</span></code></pre>
</figure>
<figure>
<pre><code data-lang="text">##    ID species num nmarked
## 1   1     BLG  10       2
## 2   1     LMB   5       2
## 3   1     YEP   5       3
## 4   2     LMB   9       6
## 5   2     YEP   7       2
## 6   3     BLG  12       4
## 7   3     YEP   7       6
## 8   4     BLG   1       0
## 9   4     LMB  11       5
## 10  4     YEP  11       8
## 11  5     BLG   9       4</code></pre>
</figure>
<p>Finally, suppose that these summarized catch data are joined with the gear data such that the gear set specific information is shown with each catch.</p>
<figure>
<pre><code data-lang="r"><span>catch3</span><span> </span><span>&lt;-</span><span> </span><span>right_join</span><span>(</span><span>geardat</span><span>,</span><span>catch3</span><span>,</span><span>by</span><span>=</span><span>&quot;ID&quot;</span><span>)</span><span>
</span><span>catch3</span></code></pre>
</figure>
<figure>
<pre><code data-lang="text">##    ID mon year  lake run effort species num nmarked
## 1   1 May 2018 round   1   1.34     BLG  10       2
## 2   1 May 2018 round   1   1.34     LMB   5       2
## 3   1 May 2018 round   1   1.34     YEP   5       3
## 4   2 May 2018 round   2   1.87     LMB   9       6
## 5   2 May 2018 round   2   1.87     YEP   7       2
## 6   3 May 2018 round   3   1.56     BLG  12       4
## 7   3 May 2018 round   3   1.56     YEP   7       6
## 8   4 May 2018  twin   1   0.92     BLG   1       0
## 9   4 May 2018  twin   1   0.92     LMB  11       5
## 10  4 May 2018  twin   1   0.92     YEP  11       8
## 11  5 May 2018  twin   2   0.67     BLG   9       4</code></pre>
</figure>
<p>These data simulate what might be seen from a flat database.</p>
<p>With these data, zeroes still need to be added as defined by missing combinations of <code>ID</code> and <code>species</code>. However, if only these two variables are included in <code>complete()</code> then <code>NA</code>s, zeroes, or something else (if we define that) will be added <code>mon</code>, <code>year</code>, <code>lake</code>, <code>run</code>, and <code>effort</code>, which is not desired. These five variables are “nested” with the <code>ID</code> variable (i.e., if you know <code>ID</code> then you know these variables) and should be treated as a group. Nesting of variables can be handled in <code>complete()</code> by including these variables within <code>nesting()</code>.</p>
<figure>
<pre><code data-lang="r"><span>catch3</span><span> </span><span>%>%</span><span> </span><span>complete</span><span>(</span><span>nesting</span><span>(</span><span>ID</span><span>,</span><span>mon</span><span>,</span><span>year</span><span>,</span><span>lake</span><span>,</span><span>run</span><span>,</span><span>effort</span><span>),</span><span>species</span><span>,</span><span>
</span><span>fill</span><span>=</span><span>list</span><span>(</span><span>num</span><span>=</span><span>0</span><span>,</span><span>nmarked</span><span>=</span><span>0</span><span>))</span><span> </span><span>%>%</span><span>
</span><span>as.data.frame</span><span>()</span></code></pre>
</figure>
<figure>
<pre><code data-lang="text">##    ID mon year  lake run effort species num nmarked
## 1   1 May 2018 round   1   1.34     BLG  10       2
## 2   1 May 2018 round   1   1.34     LMB   5       2
## 3   1 May 2018 round   1   1.34     YEP   5       3
## 4   2 May 2018 round   2   1.87     BLG   0       0
## 5   2 May 2018 round   2   1.87     LMB   9       6
## 6   2 May 2018 round   2   1.87     YEP   7       2
## 7   3 May 2018 round   3   1.56     BLG  12       4
## 8   3 May 2018 round   3   1.56     LMB   0       0
## 9   3 May 2018 round   3   1.56     YEP   7       6
## 10  4 May 2018  twin   1   0.92     BLG   1       0
## 11  4 May 2018  twin   1   0.92     LMB  11       5
## 12  4 May 2018  twin   1   0.92     YEP  11       8
## 13  5 May 2018  twin   2   0.67     BLG   9       4
## 14  5 May 2018  twin   2   0.67     LMB   0       0
## 15  5 May 2018  twin   2   0.67     YEP   0       0</code></pre>
</figure>
<p>It is possible to have nesting with <code>species</code> as well. Suppose, for example, that the scientific name for the species was included in the original <code>fishdata2</code> that was summarized (using a combination of the examples from above, but not shown here) to <code>catch4</code>.</p>
<figure>
<pre><code data-lang="r"><span>catch4</span></code></pre>
</figure>
<figure>
<pre><code data-lang="text">##    ID mon year  lake run effort species                spsci num nmarked
## 1   1 May 2018 round   1   1.34     BLG  Lepomis macrochirus  10       2
## 2   1 May 2018 round   1   1.34     LMB Micropterus dolomieu   5       2
## 3   1 May 2018 round   1   1.34     YEP     Perca flavescens   5       3
## 4   2 May 2018 round   2   1.87     LMB Micropterus dolomieu   9       6
## 5   2 May 2018 round   2   1.87     YEP     Perca flavescens   7       2
## 6   3 May 2018 round   3   1.56     BLG  Lepomis macrochirus  12       4
## 7   3 May 2018 round   3   1.56     YEP     Perca flavescens   7       6
## 8   4 May 2018  twin   1   0.92     BLG  Lepomis macrochirus   1       0
## 9   4 May 2018  twin   1   0.92     LMB Micropterus dolomieu  11       5
## 10  4 May 2018  twin   1   0.92     YEP     Perca flavescens  11       8
## 11  5 May 2018  twin   2   0.67     BLG  Lepomis macrochirus   9       4</code></pre>
</figure>
<p>The zeroes are then added to this data.frame making sure to note the nesting of <code>species</code> and <code>spsci</code>.</p>
<figure>
<pre><code data-lang="r"><span>catch4</span><span> </span><span>%>%</span><span> </span><span>complete</span><span>(</span><span>nesting</span><span>(</span><span>ID</span><span>,</span><span>mon</span><span>,</span><span>year</span><span>,</span><span>lake</span><span>,</span><span>run</span><span>,</span><span>effort</span><span>),</span><span>
</span><span>nesting</span><span>(</span><span>species</span><span>,</span><span>spsci</span><span>),</span><span>
</span><span>fill</span><span>=</span><span>list</span><span>(</span><span>num</span><span>=</span><span>0</span><span>,</span><span>nmarked</span><span>=</span><span>0</span><span>))</span><span> </span><span>%>%</span><span>
</span><span>as.data.frame</span><span>()</span></code></pre>
</figure>
<figure>
<pre><code data-lang="text">##    ID mon year  lake run effort species                spsci num nmarked
## 1   1 May 2018 round   1   1.34     BLG  Lepomis macrochirus  10       2
## 2   1 May 2018 round   1   1.34     LMB Micropterus dolomieu   5       2
## 3   1 May 2018 round   1   1.34     YEP     Perca flavescens   5       3
## 4   2 May 2018 round   2   1.87     BLG  Lepomis macrochirus   0       0
## 5   2 May 2018 round   2   1.87     LMB Micropterus dolomieu   9       6
## 6   2 May 2018 round   2   1.87     YEP     Perca flavescens   7       2
## 7   3 May 2018 round   3   1.56     BLG  Lepomis macrochirus  12       4
## 8   3 May 2018 round   3   1.56     LMB Micropterus dolomieu   0       0
## 9   3 May 2018 round   3   1.56     YEP     Perca flavescens   7       6
## 10  4 May 2018  twin   1   0.92     BLG  Lepomis macrochirus   1       0
## 11  4 May 2018  twin   1   0.92     LMB Micropterus dolomieu  11       5
## 12  4 May 2018  twin   1   0.92     YEP     Perca flavescens  11       8
## 13  5 May 2018  twin   2   0.67     BLG  Lepomis macrochirus   9       4
## 14  5 May 2018  twin   2   0.67     LMB Micropterus dolomieu   0       0
## 15  5 May 2018  twin   2   0.67     YEP     Perca flavescens   0       0</code></pre>
</figure>
<p></p>
<p></p>
<hr>
<h2>Comments</h2>
<p>This is my first explorations with <code>complete()</code> and it looks promising for this task of adding zeroes to data frames of catch by gear set for gear sets in which a species was not caught. I will be curious to hear what others think of this function and how it might fit in their workflow.</p>
<p></p>
<p></p>
<hr>
<h2>Footnotes</h2>
<div>
<ol>
<li>
<p>I find the tibble structure to be annoying with simple data.frames like this. Thus, I usually use <code>as.data.frame()</code> to remove it. <a rel="nofollow" href="http://derekogle.com/fishR/2018-04-19-Adding-Zero-Catches#fnref:tibbleannoyance" target="_blank"><img alt="↩" src="https://s.w.org/images/core/emoji/2.4/72x72/21a9.png" class="wp-smiley"></a></p>
</li>
</ol>
</div>
	<p>
<div>
<div>To <strong>leave a comment</strong> for the author, please follow the link and comment on their blog: <strong><a href="http://derekogle.com/fishR/2018-04-19-Adding-Zero-Catches"> fishR Blog</a></strong>.</div>
<hr>
<a rel="nofollow" href="https://www.r-bloggers.com/">R-bloggers.com</a> offers <strong><a rel="nofollow" href="https://feedburner.google.com/fb/a/mailverify?uri=RBloggers">daily e-mail updates</a></strong> about <a rel="nofollow" href="https://www.r-project.org/" title="The R Project for Statistical Computing">R</a> news and <a rel="nofollow" href="https://www.r-bloggers.com/search/tutorial" title="R tutorials">tutorials</a> on topics such as: <a rel="nofollow" href="https://www.r-bloggers.com/search/data%20science" title="Data science">Data science</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/Big%20Data" title="Big Data">Big Data, <a rel="nofollow" href="https://www.r-users.com/" title="R jobs">R jobs</a>, visualization (<a rel="nofollow" href="https://www.r-bloggers.com/search/ggplot2" title="ggplot and ggplot2 tutorials">ggplot2</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/boxplot" title="Boxplots using lattice and ggplot2 tutorials">Boxplots</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/map" title="Maps and gis">maps</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/animation" title="Animation in R">animation</a>), programming (<a rel="nofollow" href="https://www.r-bloggers.com/search/RStudio" title="RStudio IDE for R">RStudio</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/sweave" title="Sweave and literate programming">Sweave</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/LaTeX" title="LaTeX in R">LaTeX</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/SQL" title="SQL and databases">SQL</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/eclipse" title="Eclipse IDE for R">Eclipse</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/git" title="git and github, Version Control System">git</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/hadoop" title="Large data in R using Hadoop">hadoop</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/Web+Scraping" title="Web Scraping of google, facebook, yahoo, twitter and more using R">Web Scraping</a>) statistics (<a rel="nofollow" href="https://www.r-bloggers.com/search/regression" title="Regressions and ANOVA analysis tutorials">regression</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/PCA" title="principal component analysis tutorial">PCA</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/time+series" title="Time series">time series</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/trading" title="finance trading">trading</a>) and more...
<img width="1" alt="" src="http://feeds.feedburner.com/~r/RBloggers/~4/XVl-L_Y8n4c" height="1"></a></div>