Using Problem 12.2.1 Exercise 2 as a guide, use the ideas from Chapter 13 to answer the questions for table2.
- Compute the rate and include it in a final dataframe with the years as columns.
Answer:
The first answer approaches the problem by splitting the dataset into two and then joining the two dataset.
library(tidyverse)
table2
table2 %>% arrange(type)
table2_cases <- table2 %>% filter(type == "cases") %>%
select(country, year, count) %>%
rename(cases = count)
table2_cases
library(stringr)
table2_pop <- table2 %>% filter(type == "population") %>%
select(country, year, count) %>%
rename(population = count)
table2_pop
Now join the two datasets using two variables as the unique key.
table2_join <- table2_cases %>% inner_join(table2_pop, by=c("country", "year"))
table2_join
Create the new column.
table2_new <- table2_join %>% mutate(rate = cases / population * 10000)
table2_new
Now spread the data out into two columns.
table2_new_spread <- table2_new %>% select(country, year, rate) %>%
spread(year, rate)
table2_new_spread
Now try the new function pivot_wider(). Note new this function is from the tidyr 1.0 package.
table2_new_spread2 <- table2_new %>% select(country, year, rate) %>%
pivot_wider(country, names_from = year, values_from = rate)
table2_new_spread2
Are the two files the same. Lets give the comparedf() function a try. It is from the arsenal R package.
library(arsenal)
comparedf(table2_new_spread, table2_new_spread2)
Compare Object
Function Call:
comparedf(x = table2_new_spread, y = table2_new_spread2)
Shared: 3 non-by variables and 3 observations.
Not shared: 0 variables and 0 observations.
Differences found in 0/3 variables compared.
0 variables compared have non-identical attributes.
Anternative Solution:
Can we use spread from the beginning? Yes.
table2 %>% spread(key = type, value = count) %>%
mutate(rate = cases/population) %>%
select(-cases, -population) %>%
spread(key = year, value = rate)
Or
table2 %>% pivot_wider(names_from = type, values_from = count) %>%
mutate(rate = cases/population) %>%
select(-cases, -population) %>%
pivot_wider(names_from = year, values_from = rate)
- Now make a clustered bar graph. Question, which table is the one to use, table2_new or table2_new_spread?
Answer: The one to use is in tidy format. So table2_new. Note the use of as.factor() function. This is our next topic of discussion.
table2_new %>% ggplot(aes(x = country, y = rate, fill = as.factor(year))) +
geom_bar(stat = "identity", position = "dodge") +
theme_light()
![](data:image/png;base64,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)
Or you can make the plot using year to group the bars.
table2_new %>% ggplot(aes(x = as.factor(year), y = rate, fill = country)) +
geom_bar(stat = "identity", position = "dodge") +
theme_light()
![](data:image/png;base64,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)
```
LS0tCnRpdGxlOiAiUHJhY3RpY2UgZm9yIHRoZSBwcmFjdGljZSBRdWl6IgpvdXRwdXQ6CiAgd29yZF9kb2N1bWVudDogZGVmYXVsdAogIHBkZl9kb2N1bWVudDogZGVmYXVsdAogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKLS0tCgpVc2luZyBQcm9ibGVtIDEyLjIuMSBFeGVyY2lzZSAyIGFzIGEgZ3VpZGUsIHVzZSB0aGUgaWRlYXMgZnJvbSBDaGFwdGVyIDEzIHRvIGFuc3dlciB0aGUgcXVlc3Rpb25zIGZvciAqdGFibGUyKi4KCjEuIENvbXB1dGUgdGhlIHJhdGUgYW5kIGluY2x1ZGUgaXQgaW4gYSBmaW5hbCBkYXRhZnJhbWUgd2l0aCB0aGUgeWVhcnMgYXMgY29sdW1ucy4gIAoKKipBbnN3ZXI6KioKClRoZSBmaXJzdCBhbnN3ZXIgYXBwcm9hY2hlcyB0aGUgcHJvYmxlbSBieSBzcGxpdHRpbmcgdGhlIGRhdGFzZXQgaW50byB0d28gYW5kIHRoZW4gam9pbmluZyB0aGUgdHdvIGRhdGFzZXQuCgpgYGB7ciBtZXNzYWdlPUZBTFNFfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKCnRhYmxlMgpgYGAKCmBgYHtyfQp0YWJsZTIgJT4lIGFycmFuZ2UodHlwZSkKYGBgCgoKCmBgYHtyfQp0YWJsZTJfY2FzZXMgPC0gdGFibGUyICU+JSBmaWx0ZXIodHlwZSA9PSAiY2FzZXMiKSAlPiUgCiAgc2VsZWN0KGNvdW50cnksIHllYXIsIGNvdW50KSAlPiUKICByZW5hbWUoY2FzZXMgPSBjb3VudCkKdGFibGUyX2Nhc2VzCmBgYAoKCmBgYHtyfQpsaWJyYXJ5KHN0cmluZ3IpCgoKdGFibGUyX3BvcCA8LSB0YWJsZTIgJT4lIGZpbHRlcih0eXBlID09ICJwb3B1bGF0aW9uIikgJT4lIAogIHNlbGVjdChjb3VudHJ5LCB5ZWFyLCBjb3VudCkgJT4lCiAgcmVuYW1lKHBvcHVsYXRpb24gPSBjb3VudCkKdGFibGUyX3BvcApgYGAKCk5vdyBqb2luIHRoZSB0d28gZGF0YXNldHMgdXNpbmcgdHdvIHZhcmlhYmxlcyBhcyB0aGUgdW5pcXVlIGtleS4KCmBgYHtyfQp0YWJsZTJfam9pbiA8LSB0YWJsZTJfY2FzZXMgJT4lIGlubmVyX2pvaW4odGFibGUyX3BvcCwgYnk9YygiY291bnRyeSIsICJ5ZWFyIikpIAoKdGFibGUyX2pvaW4KYGBgCiAKIENyZWF0ZSB0aGUgbmV3IGNvbHVtbi4KIApgYGB7cn0KdGFibGUyX25ldyA8LSB0YWJsZTJfam9pbiAlPiUgbXV0YXRlKHJhdGUgPSBjYXNlcyAvIHBvcHVsYXRpb24gKiAxMDAwMCkKCnRhYmxlMl9uZXcKYGBgCgpOb3cgc3ByZWFkIHRoZSBkYXRhIG91dCBpbnRvIHR3byBjb2x1bW5zLgogCmBgYHtyfQp0YWJsZTJfbmV3X3NwcmVhZCA8LSB0YWJsZTJfbmV3ICU+JSBzZWxlY3QoY291bnRyeSwgeWVhciwgcmF0ZSkgJT4lCiAgc3ByZWFkKHllYXIsIHJhdGUpCgp0YWJsZTJfbmV3X3NwcmVhZApgYGAKIApOb3cgdHJ5IHRoZSBuZXcgZnVuY3Rpb24gKnBpdm90X3dpZGVyKCkqLiAgTm90ZSBuZXcgdGhpcyBmdW5jdGlvbiBpcyBmcm9tIHRoZSAqdGlkeXIqIDEuMCBwYWNrYWdlLgoKYGBge3J9CnRhYmxlMl9uZXdfc3ByZWFkMiA8LSB0YWJsZTJfbmV3ICU+JSBzZWxlY3QoY291bnRyeSwgeWVhciwgcmF0ZSkgJT4lCiAgcGl2b3Rfd2lkZXIoY291bnRyeSwgbmFtZXNfZnJvbSA9IHllYXIsIHZhbHVlc19mcm9tID0gcmF0ZSkKCnRhYmxlMl9uZXdfc3ByZWFkMgpgYGAKCkFyZSB0aGUgdHdvIGZpbGVzIHRoZSBzYW1lLiAgTGV0cyBnaXZlIHRoZSAqY29tcGFyZWRmKCkqIGZ1bmN0aW9uIGEgdHJ5LiAgSXQgaXMgZnJvbSB0aGUgKmFyc2VuYWwqIFIgcGFja2FnZS4gCgpgYGB7cn0KbGlicmFyeShhcnNlbmFsKQoKY29tcGFyZWRmKHRhYmxlMl9uZXdfc3ByZWFkLCB0YWJsZTJfbmV3X3NwcmVhZDIpCmBgYAoKKipBbnRlcm5hdGl2ZSBTb2x1dGlvbjoqKgoKQ2FuIHdlIHVzZSBzcHJlYWQgZnJvbSB0aGUgYmVnaW5uaW5nPyAgWWVzLgoKYGBge3J9CnRhYmxlMiAlPiUgc3ByZWFkKGtleSA9IHR5cGUsIHZhbHVlID0gY291bnQpICU+JQogIG11dGF0ZShyYXRlID0gY2FzZXMvcG9wdWxhdGlvbikgJT4lCiAgc2VsZWN0KC1jYXNlcywgLXBvcHVsYXRpb24pICU+JQogIHNwcmVhZChrZXkgPSB5ZWFyLCB2YWx1ZSA9IHJhdGUpCmBgYAoKT3IKCgpgYGB7cn0KdGFibGUyICU+JSBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gdHlwZSwgdmFsdWVzX2Zyb20gPSBjb3VudCkgJT4lCiAgbXV0YXRlKHJhdGUgPSBjYXNlcy9wb3B1bGF0aW9uKSAlPiUKICBzZWxlY3QoLWNhc2VzLCAtcG9wdWxhdGlvbikgJT4lCiAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IHllYXIsIHZhbHVlc19mcm9tID0gcmF0ZSkKYGBgCgoyLiBOb3cgbWFrZSBhIGNsdXN0ZXJlZCBiYXIgZ3JhcGguIFF1ZXN0aW9uLCB3aGljaCB0YWJsZSBpcyB0aGUgb25lIHRvIHVzZSwgdGFibGUyX25ldyBvciB0YWJsZTJfbmV3X3NwcmVhZD8KIAogKipBbnN3ZXI6KiogIFRoZSBvbmUgdG8gdXNlIGlzIGluIHRpZHkgZm9ybWF0LiBTbyB0YWJsZTJfbmV3LiAgTm90ZSB0aGUgdXNlIG9mIGFzLmZhY3RvcigpIGZ1bmN0aW9uLiAgVGhpcyBpcyBvdXIgbmV4dCB0b3BpYyBvZiBkaXNjdXNzaW9uLgogCmBgYHtyfQp0YWJsZTJfbmV3ICU+JSBnZ3Bsb3QoYWVzKHggPSBjb3VudHJ5LCB5ID0gcmF0ZSwgZmlsbCA9IGFzLmZhY3Rvcih5ZWFyKSkpICsKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAiZG9kZ2UiKSArCiAgdGhlbWVfbGlnaHQoKQpgYGAKIApPciB5b3UgY2FuIG1ha2UgdGhlIHBsb3QgdXNpbmcgeWVhciB0byBncm91cCB0aGUgYmFycy4KIApgYGB7cn0KdGFibGUyX25ldyAlPiUgZ2dwbG90KGFlcyh4ID0gYXMuZmFjdG9yKHllYXIpLCB5ID0gcmF0ZSwgZmlsbCA9IGNvdW50cnkpKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gImRvZGdlIikgKwogIHRoZW1lX2xpZ2h0KCkKYGBgCmBgYAogCiA=