Obtaining the data set
The first chunk produces for you vectors from a “real-life” data set, which normally is a data frame/tibble. The Gapminder data set, here loaded from the gapminder R library, shows life expectancy, population, and GDP per capita of many world countries since 1950, from official public sources. We pick random four countries in year 1997 for our exercises.
library(tidyverse)
library(gapminder)
set.seed(12) #this makes "random" the same every time we run this chunk
gap4_1997 <- gapminder %>% dplyr::filter(year == 1997) %>% sample_n(4)
country4 <- gap4_1997$country %>% as.character()
lifeExp4 <- gap4_1997$lifeExp
continent4 <- gap4_1997$continent %>% as.character()
HERE IT STARTS TO BE IMPORTANT Familiarize yourself with the data set (still a data frame):
gap4_1997
… and these are our vectors. They are completely independent of each other now, not remembering that they originate from the same spreadsheet at all!!!
country4
[1] "Nepal" "Mali" "Netherlands" "Kenya"
continent4
[1] "Asia" "Africa" "Europe" "Africa"
names(lifeExp4) <- country4
lifeExp4
Nepal Mali Netherlands Kenya
59.426 49.903 78.030 54.407
Subsetting with position
just one value, the one on the 1st position
lifeExp4[3]
Netherlands
78.03
three values, those on the 1st, 2nd, and 3rd position
lifeExp4[1:3]
Nepal Mali Netherlands
59.426 49.903 78.030
three values, those on the 1st, 2nd and 4th position. You have to concatenate them into a vector!!!
lifeExp4[c(1:2, 4)]
Nepal Mali Kenya
59.426 49.903 54.407
lifeExp4[c(1:2,4,1,1,1)]
Nepal Mali Kenya Nepal Nepal Nepal
59.426 49.903 54.407 59.426 59.426 59.426
Subsetting with name
lifeExp4["Mali"]
Mali
49.903
which(names(lifeExp4) == "Mali" )
[1] 2
lifeExp4[c("Mali", "Nepal")]
Mali Nepal
49.903 59.426
Subsetting with condition (comparison operators)
lifeExp4 == 59.426
Nepal Mali Netherlands Kenya
TRUE FALSE FALSE FALSE
lifeExp4[lifeExp4 == 59.426]
Nepal
59.426
lifeExp4[lifeExp4 != 59.426]
Mali Netherlands Kenya
49.903 78.030 54.407
lifeExp4[lifeExp4 > 59.426]
Netherlands
78.03
lifeExp4[lifeExp4 >= 59.426]
Nepal Netherlands
59.426 78.030
… and one more operator: %in%. “Is my value in that vector?”
continent4
[1] "Asia" "Africa" "Europe" "Africa"
"America" %in% continent4
[1] FALSE
"Asia" %in% continent4
[1] TRUE
continent4 %in% "Asia"
[1] TRUE FALSE FALSE FALSE
continent4 == "Asia"
[1] TRUE FALSE FALSE FALSE
continent4
[1] "Asia" "Africa" "Europe" "Africa"
country4
Asia Africa Europe Africa
"Nepal" "Mali" "Netherlands" "Kenya"
country4[names(country4) %in% c("Africa", "Asia")]
Asia Africa Africa
"Nepal" "Mali" "Kenya"
Conditions combined with logical operators (&,|, !)
names(country4) == "Africa" | names(country4) == "Asia"
[1] TRUE TRUE FALSE TRUE
country4[names(country4) == "Africa" | names(country4) == "Asia" ]
Asia Africa Africa
"Nepal" "Mali" "Kenya"
AND
lifeExp4[lifeExp4 > 50 & lifeExp4 < 70]
Nepal Kenya
59.426 54.407
OR
lifeExp4[lifeExp4 < 50 | lifeExp4 > 70]
Mali Netherlands
49.903 78.030
NEGATION
lifeExp4[!(lifeExp4 > 50) ]
Mali
49.903
lifeExp4[lifeExp4 < 50 ]
Mali
49.903
Important future reference for details
Combination of AND and OR: AND has priority. Use parentheses to override that. Mind truth conditions in negations. More details e.g. here. On DataCamp here and here.
Using subsetting to replace elements
country4a
Asia Africa Europe Africa
"Nepal" "Mali" "Netherlands" "Kenya"
country4a
Asia Africa Europe Africa
"NEPAL" "Mali" "Netherlands" "Kenya"
country4a
Asia Africa Europe Africa
"NEPAL" "SOMEWHERE IN AFRICA" "Netherlands" "SOMEWHERE IN AFRICA"
LS0tCnRpdGxlOiAiVmVjdG9yIHN1YnNldHRpbmciCm91dHB1dDoKICB3b3JkX2RvY3VtZW50OiBkZWZhdWx0CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAotLS0KIyBPYnRhaW5pbmcgdGhlIGRhdGEgc2V0ClRoZSBmaXJzdCBjaHVuayBwcm9kdWNlcyBmb3IgeW91IHZlY3RvcnMgZnJvbSBhIFsicmVhbC1saWZlIiBkYXRhIHNldF0oaHR0cHM6Ly93d3cuZ2FwbWluZGVyLm9yZy9hYm91dC8pLCB3aGljaCBub3JtYWxseSBpcyBhIGRhdGEgZnJhbWUvdGliYmxlLgpUaGUgW0dhcG1pbmRlcl0oaHR0cHM6Ly93d3cuZ2FwbWluZGVyLm9yZy9kYXRhLykgZGF0YSBzZXQsIGhlcmUgbG9hZGVkIGZyb20gdGhlIFtgZ2FwbWluZGVyYCBSIGxpYnJhcnldKGh0dHBzOi8vY3Jhbi5yLXByb2plY3Qub3JnL3dlYi9wYWNrYWdlcy9nYXBtaW5kZXIvaW5kZXguaHRtbCksIHNob3dzIGxpZmUgZXhwZWN0YW5jeSwgcG9wdWxhdGlvbiwgYW5kIEdEUCBwZXIgY2FwaXRhIG9mIG1hbnkgd29ybGQgY291bnRyaWVzIHNpbmNlIDE5NTAsIGZyb20gb2ZmaWNpYWwgcHVibGljIHNvdXJjZXMuCldlIHBpY2sgcmFuZG9tIGZvdXIgY291bnRyaWVzIGluIHllYXIgMTk5NyBmb3Igb3VyIGV4ZXJjaXNlcy4gCgpgYGB7ciBtZXNzYWdlID0gRkFMU0V9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGdhcG1pbmRlcikKc2V0LnNlZWQoMTIpICN0aGlzIG1ha2VzICJyYW5kb20iIHRoZSBzYW1lIGV2ZXJ5IHRpbWUgd2UgcnVuIHRoaXMgY2h1bmsKZ2FwNF8xOTk3IDwtIGdhcG1pbmRlciAlPiUgZHBseXI6OmZpbHRlcih5ZWFyID09IDE5OTcpICU+JSBzYW1wbGVfbig0KQpjb3VudHJ5NCA8LSBnYXA0XzE5OTckY291bnRyeSAlPiUgYXMuY2hhcmFjdGVyKCkgIApsaWZlRXhwNCA8LSBnYXA0XzE5OTckbGlmZUV4cCAKY29udGluZW50NCA8LSBnYXA0XzE5OTckY29udGluZW50ICU+JSBhcy5jaGFyYWN0ZXIoKQpgYGAKCl9fSEVSRSBJVCBTVEFSVFMgVE8gQkUgSU1QT1JUQU5UX18KRmFtaWxpYXJpemUgeW91cnNlbGYgd2l0aCB0aGUgZGF0YSBzZXQgKHN0aWxsIGEgZGF0YSBmcmFtZSk6CgpgYGB7cn0KZ2FwNF8xOTk3CmBgYAouLi4gYW5kIHRoZXNlIGFyZSBvdXIgdmVjdG9ycy4gVGhleSBhcmUgY29tcGxldGVseSBpbmRlcGVuZGVudCBvZiBlYWNoIG90aGVyIG5vdywgbm90IHJlbWVtYmVyaW5nIHRoYXQgdGhleSBvcmlnaW5hdGUgZnJvbSB0aGUgc2FtZSBzcHJlYWRzaGVldCBhdCBhbGwhISEKCgpgYGB7cn0KY291bnRyeTQKYGBgCgpgYGB7cn0KY29udGluZW50NApgYGAKCmBgYHtyfQpuYW1lcyhsaWZlRXhwNCkgPC0gY291bnRyeTQKYGBgCgoKYGBge3J9CmxpZmVFeHA0CmBgYAoKCiMgU3Vic2V0dGluZyB3aXRoIHBvc2l0aW9uCmp1c3Qgb25lIHZhbHVlLCB0aGUgb25lIG9uIHRoZSAxc3QgcG9zaXRpb24gCmBgYHtyfQpsaWZlRXhwNFszXQpgYGAKCnRocmVlIHZhbHVlcywgdGhvc2Ugb24gdGhlIDFzdCwgMm5kLCBhbmQgM3JkIHBvc2l0aW9uCmBgYHtyfQpsaWZlRXhwNFsxOjNdCmBgYAoKdGhyZWUgdmFsdWVzLCB0aG9zZSBvbiB0aGUgMXN0LCAybmQgYW5kIDR0aCBwb3NpdGlvbi4gX19Zb3UgaGF2ZSB0byBjb25jYXRlbmF0ZSB0aGVtIGludG8gYSB2ZWN0b3IhISFfXwpgYGB7cn0KbGlmZUV4cDRbYygxOjIsIDQpXQpgYGAKYGBge3J9CmxpZmVFeHA0W2MoMToyLDQsMSwxLDEpXQpgYGAKCgojIFN1YnNldHRpbmcgd2l0aCBuYW1lCgpgYGB7cn0KbGlmZUV4cDRbIk1hbGkiXQpgYGAKCmBgYHtyfQp3aGljaChuYW1lcyhsaWZlRXhwNCkgPT0gIk1hbGkiICkKYGBgCgoKYGBge3J9CmxpZmVFeHA0W2MoIk1hbGkiLCAiTmVwYWwiKV0KYGBgCgoKIyBTdWJzZXR0aW5nIHdpdGggY29uZGl0aW9uIChjb21wYXJpc29uIG9wZXJhdG9ycykKCmBgYHtyfQpsaWZlRXhwNCA9PSA1OS40MjYKYGBgCgpgYGB7cn0KbGlmZUV4cDRbbGlmZUV4cDQgPT0gNTkuNDI2XQpgYGAKCmBgYHtyfQpsaWZlRXhwNFtsaWZlRXhwNCAhPSA1OS40MjZdCmBgYAoKYGBge3J9CmxpZmVFeHA0W2xpZmVFeHA0ID4gNTkuNDI2XQpgYGAKCmBgYHtyfQpsaWZlRXhwNFtsaWZlRXhwNCA+PSA1OS40MjZdCmBgYAoKLi4uIGFuZCBvbmUgbW9yZSBvcGVyYXRvcjogYCVpbiVgLiAiSXMgbXkgdmFsdWUgaW4gdGhhdCB2ZWN0b3I/IgoKYGBge3J9CmNvbnRpbmVudDQKYGBgCgoKYGBge3J9CiJBbWVyaWNhIiAlaW4lIGNvbnRpbmVudDQKYGBgCgpgYGB7cn0KIkFzaWEiICVpbiUgY29udGluZW50NApgYGAKCmBgYHtyfQpjb250aW5lbnQ0ICVpbiUgIkFzaWEiCmBgYAoKYGBge3J9CmNvbnRpbmVudDQgPT0gIkFzaWEiCmBgYAoKCmBgYHtyfQpuYW1lcyhjb3VudHJ5NCkgPC0gY29udGluZW50NApjb250aW5lbnQ0CmBgYAoKYGBge3J9CmNvdW50cnk0CmBgYAoKCmBgYHtyfQpjb3VudHJ5NFtuYW1lcyhjb3VudHJ5NCkgJWluJSBjKCJBZnJpY2EiLCAiQXNpYSIpXQpgYGAKCiMgQ29uZGl0aW9ucyBjb21iaW5lZCB3aXRoIGxvZ2ljYWwgb3BlcmF0b3JzIChgJmAsYHxgLCBgIWApCgpgYGB7cn0KKG5hbWVzKGNvdW50cnk0KSA9PSAiQWZyaWNhIiB8IG5hbWVzKGNvdW50cnk0KSA9PSAiQXNpYSIpCmBgYAoKCmBgYHtyfQpjb3VudHJ5NFtuYW1lcyhjb3VudHJ5NCkgPT0gIkFmcmljYSIgfCBuYW1lcyhjb3VudHJ5NCkgPT0gIkFzaWEiIF0KYGBgCgoKQU5ECmBgYHtyfQpsaWZlRXhwNFtsaWZlRXhwNCA+IDUwICYgbGlmZUV4cDQgPCA3MF0KYGBgCgpPUgpgYGB7cn0KbGlmZUV4cDRbbGlmZUV4cDQgPCA1MCB8IGxpZmVFeHA0ID4gNzBdCmBgYAoKTkVHQVRJT04KYGBge3J9CmxpZmVFeHA0WyEobGlmZUV4cDQgPiA1MCkgXQpgYGAKCmBgYHtyfQpsaWZlRXhwNFtsaWZlRXhwNCA8IDUwIF0KYGBgCgojIyMgSW1wb3J0YW50IGZ1dHVyZSByZWZlcmVuY2UgZm9yIGRldGFpbHMKQ29tYmluYXRpb24gb2YgQU5EIGFuZCBPUjogQU5EIGhhcyBwcmlvcml0eS4gVXNlIHBhcmVudGhlc2VzIHRvIG92ZXJyaWRlIHRoYXQuCk1pbmQgdHJ1dGggY29uZGl0aW9ucyBpbiBuZWdhdGlvbnMuIE1vcmUgZGV0YWlscyBlLmcuIFtoZXJlXShodHRwczovL3d3dy50dXRvcmlhbHNwb2ludC5jb20vci9yX29wZXJhdG9ycy5odG0pLiBPbiBEYXRhQ2FtcCBbaGVyZV0oaHR0cHM6Ly9jYW1wdXMuZGF0YWNhbXAuY29tL2NvdXJzZXMvaW50ZXJtZWRpYXRlLXIvY2hhcHRlci0xLWNvbmRpdGlvbmFscy1hbmQtY29udHJvbC1mbG93P2V4PTEpIGFuZCBbaGVyZV0oaHR0cHM6Ly9jYW1wdXMuZGF0YWNhbXAuY29tL2NvdXJzZXMvaW50ZXJtZWRpYXRlLXIvY2hhcHRlci0xLWNvbmRpdGlvbmFscy1hbmQtY29udHJvbC1mbG93P2V4PTYpLiAKCgojIFVzaW5nIHN1YnNldHRpbmcgdG8gcmVwbGFjZSBlbGVtZW50cwpgYGB7cn0KY291bnRyeTRhIDwtIGNvdW50cnk0ICNuZXcgdmFyaWFibGUgYXMgb3VyIG5ldyBzYW5kYm94CmNvdW50cnk0YQpgYGAKCmBgYHtyfQpjb3VudHJ5NGFbMV0gPC0gIk5FUEFMIgpjb3VudHJ5NGEKYGBgCmBgYHtyfQpjb3VudHJ5NGFbbmFtZXMoY291bnRyeTRhKSA9PSAiQWZyaWNhIl0gPC0gIlNPTUVXSEVSRSBJTiBBRlJJQ0EiCmNvdW50cnk0YQpgYGAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo=