suppressPackageStartupMessages(library(tidyverse))
Define three simple data frames. Also define names2 and plays2 as shown in DataCamp.
t1 = data_frame(alpha = letters[1:6], num = 1:6)
t2 = data_frame(alpha = letters[4:10], num = 4:10)
joins
multi column join
joining names2 and plays2
left_join(names2,plays2) # still works, by is defined automatically
left_join(names2,plays2, by=c("name","surname"))
inner join
now, back to t1 and t2
t1
t2
left_join(t1,t2, by="alpha")
inner_join(t1, t2, by = "alpha")
left-join
left_join(t1, t2, by = "alpha")
right-join
you do the join
full-join
if not set, the suffix is assigned as: x for LHS, y for RHS
full_join(t1, t2, by = "alpha")
full_join(t1, t2, by = "alpha", suffix = c("_t1", "_t2"))
about is.na()
full_join(t1, t2, by = "alpha", suffix = c("_t1", "_t2")) %>%
mutate(missing=is.na(num_t1))
na.rm is an option of sum() or mean() functions (actually many functions rely on it) to remove NA. But, is.na() is a standalone function which returns a logical vector.
birvector <- c(4,NA,6,8)
is.na(birvector)
sum(birvector)
sum(birvector, na.rm=TRUE)
pipe on right
By the way, if needed be, the table coming from pipe can be used on right.
t1 %>%
left_join(t2, . , by="alpha")
intersect
uses whole row
t1
t2
t3
semi_join(t1,t3, by="alpha")
intersect(t1,t3)
data.frame vs data_frame
compare t1 and t1old
t1old = data.frame("alpha-beta" = letters[1:6], num = 1:6)
t1new = data_frame("alpha-beta" = letters[1:6], num = 1:6)
t1 = data_frame(alpha = letters[1:6], num = 1:6)
t2 = data_frame(alpha = letters[4:10], num = 4:10)
t1old
t1
you find an example of recycling of vectors
bind
bind_rows(tablo1=t1,tablo2=t2,.id="table")
LS0tCnRpdGxlOiAibGVzc29uMDciCmF1dGhvcjogImFscGVyIHlpbG1heiIKZGF0ZTogIk9jdG9iZXIgMzEsIDIwMTciCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnN1cHByZXNzUGFja2FnZVN0YXJ0dXBNZXNzYWdlcyhsaWJyYXJ5KHRpZHl2ZXJzZSkpCmBgYAoKRGVmaW5lIHRocmVlIHNpbXBsZSBkYXRhIGZyYW1lcy4gQWxzbyBkZWZpbmUgYG5hbWVzMmAgYW5kIGBwbGF5czJgIGFzIHNob3duIGluIERhdGFDYW1wLgoKYGBge3Igc2FtcGxlLXRhYmxlc30KdDEgPSBkYXRhX2ZyYW1lKGFscGhhID0gbGV0dGVyc1sxOjZdLCBudW0gPSAxOjYpIAp0MiA9IGRhdGFfZnJhbWUoYWxwaGEgPSBsZXR0ZXJzWzQ6MTBdLCBudW0gPSA0OjEwKQp0MyA9IGRhdGFfZnJhbWUoYWxwaGEgPSBsZXR0ZXJzWzI6N10sIG51bSA9IDE6Niwgbm9ybT1ybm9ybShuID0gNikpCm5hbWVzMiA8LSBkYXRhX2ZyYW1lKG5hbWU9YygiSm9obiIsIkpvaG4iLCJQYXVsIiksCiAgICAgICAgICAgICAgICAgICAgc3VybmFtZT1jKCJDb2x0cmFuZSIsIkxlbm5vbiIsIk1jQ2FydG5leSIpLAogICAgICAgICAgICAgICAgICAgIGJhbmQ9YyhOQSwiQmVhdGxlcyIsIkJlYXRsZXMiKSkKcGxheXMyIDwtIGRhdGFfZnJhbWUobmFtZT1jKCJKb2huIiwiUGF1bCIsIktlaXRoIiksCiAgICAgICAgICAgICAgICAgICAgc3VybmFtZT1jKCJMZW5ub24iLCJNY0NhcnRuZXkiLCJSaWNoYXJkcyIpLAogICAgICAgICAgICAgICAgICAgIHBsYXlzPWMoIkd1aXRhciIsIkJhc3MiLCJHdWl0YXIiKSkKYGBgCgoKIyBqb2lucwoKIyMgbXVsdGkgY29sdW1uIGpvaW4KCmpvaW5pbmcgYG5hbWVzMmAgYW5kIGBwbGF5czJgCgpgYGB7cn0KbGVmdF9qb2luKG5hbWVzMixwbGF5czIpICMgc3RpbGwgd29ya3MsIGJ5IGlzIGRlZmluZWQgYXV0b21hdGljYWxseQpsZWZ0X2pvaW4obmFtZXMyLHBsYXlzMiwgYnk9YygibmFtZSIsInN1cm5hbWUiKSkKYGBgCgoKIyMgaW5uZXIgam9pbgoKbm93LCBiYWNrIHRvIGB0MWAgYW5kIGB0MmAKCmBgYHtyfQp0MQp0MgpsZWZ0X2pvaW4odDEsdDIsIGJ5PSJhbHBoYSIpCmlubmVyX2pvaW4odDEsIHQyLCBieSA9ICJhbHBoYSIpCmBgYAoKIyMgbGVmdC1qb2luCgpgYGB7cn0KbGVmdF9qb2luKHQxLCB0MiwgYnkgPSAiYWxwaGEiKQpgYGAKCgojIyByaWdodC1qb2luCgp5b3UgZG8gdGhlIGpvaW4KCmBgYHtyfQoKYGBgCgojIyBmdWxsLWpvaW4KCmlmIG5vdCBzZXQsIHRoZSBzdWZmaXggaXMgYXNzaWduZWQgYXM6IGB4YCBmb3IgTEhTLCBgeWAgZm9yIFJIUwoKYGBge3J9CmZ1bGxfam9pbih0MSwgdDIsIGJ5ID0gImFscGhhIikKZnVsbF9qb2luKHQxLCB0MiwgYnkgPSAiYWxwaGEiLCBzdWZmaXggPSBjKCJfdDEiLCAiX3QyIikpCmBgYAoKIyMjIGFib3V0IGBpcy5uYSgpYAoKYGBge3J9CmZ1bGxfam9pbih0MSwgdDIsIGJ5ID0gImFscGhhIiwgc3VmZml4ID0gYygiX3QxIiwgIl90MiIpKSAlPiUKICBtdXRhdGUobWlzc2luZz1pcy5uYShudW1fdDEpKQpgYGAKCmBuYS5ybWAgaXMgYW4gb3B0aW9uIG9mIGBzdW0oKWAgb3IgYG1lYW4oKWAgZnVuY3Rpb25zIChhY3R1YWxseSBtYW55IGZ1bmN0aW9ucyByZWx5IG9uIGl0KSB0byByZW1vdmUgYE5BYC4gQnV0LCBgaXMubmEoKWAgaXMgYSBzdGFuZGFsb25lIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYSBsb2dpY2FsIHZlY3Rvci4KCmBgYHtyfQpiaXJ2ZWN0b3IgPC0gYyg0LE5BLDYsOCkKaXMubmEoYmlydmVjdG9yKQpzdW0oYmlydmVjdG9yKQpzdW0oYmlydmVjdG9yLCBuYS5ybT1UUlVFKQoKYGBgCgojIyBwaXBlIG9uIHJpZ2h0CgpCeSB0aGUgd2F5LCBpZiBuZWVkZWQgYmUsIHRoZSB0YWJsZSBjb21pbmcgZnJvbSBwaXBlIGNhbiBiZSB1c2VkIG9uIHJpZ2h0LgoKYGBge3J9CnQxICU+JQogIGxlZnRfam9pbih0MiwgLiAsIGJ5PSJhbHBoYSIpCmBgYAoKIyMgaW50ZXJzZWN0Cgp1c2VzIHdob2xlIHJvdwoKYGBge3J9CnQxCnQyCnQzCgpzZW1pX2pvaW4odDEsdDMsIGJ5PSJhbHBoYSIpCmludGVyc2VjdCh0MSx0MykKYGBgCgoKIyMgZGF0YS5mcmFtZSB2cyBkYXRhX2ZyYW1lCgpjb21wYXJlIHQxIGFuZCB0MW9sZAoKYGBge3J9CnQxb2xkID0gZGF0YS5mcmFtZSgiYWxwaGEtYmV0YSIgPSBsZXR0ZXJzWzE6Nl0sIG51bSA9IDE6NikKdDFuZXcgPSBkYXRhX2ZyYW1lKCJhbHBoYS1iZXRhIiA9IGxldHRlcnNbMTo2XSwgbnVtID0gMTo2KQp0MSA9IGRhdGFfZnJhbWUoYWxwaGEgPSBsZXR0ZXJzWzE6Nl0sIG51bSA9IDE6NikgCnQyID0gZGF0YV9mcmFtZShhbHBoYSA9IGxldHRlcnNbNDoxMF0sIG51bSA9IDQ6MTApCgp0MW9sZAp0MQpgYGAKCnlvdSBmaW5kIGFuIGV4YW1wbGUgb2YgcmVjeWNsaW5nIG9mIHZlY3RvcnMKCmBgYHtyfQoKYGBgCgojIGJpbmQKCmBgYHtyfQpiaW5kX3Jvd3ModGFibG8xPXQxLHRhYmxvMj10MiwuaWQ9InRhYmxlIikKYGBgCgojIGZsaWdodHMgdGFibGVzCgohW255Y2ZsaWdodHMxMyB0YWJsZXNdKHJlbGF0aW9uYWwtbnljZmxpZ2h0cy5wbmcpCgo=