Load packages
library(tidyverse)
Look at the first table band_members
glimpse(band_members)
## Rows: 3
## Columns: 2
## $ name <chr> "Mick", "John", "Paul"
## $ band <chr> "Stones", "Beatles", "Beatles"
Look at the second table band_instruments
glimpse(band_instruments)
## Rows: 3
## Columns: 2
## $ name <chr> "John", "Paul", "Keith"
## $ plays <chr> "guitar", "bass", "guitar"
Using inner_join
inner_join(band_instruments, band_members, by = "name")
## # A tibble: 2 × 3
## name plays band
## <chr> <chr> <chr>
## 1 John guitar Beatles
## 2 Paul bass Beatles
Using left_join
band_instruments %>%
left_join(band_members, by = "name")
## # A tibble: 3 × 3
## name plays band
## <chr> <chr> <chr>
## 1 John guitar Beatles
## 2 Paul bass Beatles
## 3 Keith guitar <NA>
Using right_join
band_instruments %>%
right_join(band_members, by = "name")
## # A tibble: 3 × 3
## name plays band
## <chr> <chr> <chr>
## 1 John guitar Beatles
## 2 Paul bass Beatles
## 3 Mick <NA> Stones
Using full_join
band_instruments %>%
full_join(band_members, by = "name")
## # A tibble: 4 × 3
## name plays band
## <chr> <chr> <chr>
## 1 John guitar Beatles
## 2 Paul bass Beatles
## 3 Keith guitar <NA>
## 4 Mick <NA> Stones
Duplicate keys
x <- tribble(
~key, ~val_x,
1, "x1",
2, "x2",
2, "x3"
)
y <- tribble(
~key, ~val_y,
1, "y1",
2, "y2"
)
left_join(x, y, by = "key")
## # A tibble: 3 × 3
## key val_x val_y
## <dbl> <chr> <chr>
## 1 1 x1 y1
## 2 2 x2 y2
## 3 2 x3 y2
x <- tribble(
~key, ~val_x,
1, "x1",
2, "x2",
2, "x3"
)
y <- tribble(
~key, ~val_y,
1, "y1",
2, "y2",
2, "y3"
)
left_join(x, y, by = "key")
## # A tibble: 5 × 3
## key val_x val_y
## <dbl> <chr> <chr>
## 1 1 x1 y1
## 2 2 x2 y2
## 3 2 x2 y3
## 4 2 x3 y2
## 5 2 x3 y3
Defining the key columns
Using default key
inner_join(band_members, band_instruments)
## # A tibble: 2 × 3
## name band plays
## <chr> <chr> <chr>
## 1 John Beatles guitar
## 2 Paul Beatles bass
Using a character vector
inner_join(band_members, band_instruments, by = "name")
## # A tibble: 2 × 3
## name band plays
## <chr> <chr> <chr>
## 1 John Beatles guitar
## 2 Paul Beatles bass
Using a named character vector
inner_join(band_members, band_instruments, by = c("name" = "name"))
## # A tibble: 2 × 3
## name band plays
## <chr> <chr> <chr>
## 1 John Beatles guitar
## 2 Paul Beatles bass
Semi Join
semi_join(band_members, band_instruments, by = c("name" = "name"))
## # A tibble: 2 × 2
## name band
## <chr> <chr>
## 1 John Beatles
## 2 Paul Beatles
Anti Join
anti_join(band_members, band_instruments, by = c("name" = "name"))
## # A tibble: 1 × 2
## name band
## <chr> <chr>
## 1 Mick Stones
Intersect
df1 <- tribble(
~x, ~y,
1, 1,
2, 1
)
df2 <- tribble(
~x, ~y,
1, 1,
1, 2
)
intersect(df1, df2)
## # A tibble: 1 × 2
## x y
## <dbl> <dbl>
## 1 1 1
Union
union(df1, df2)
## # A tibble: 3 × 2
## x y
## <dbl> <dbl>
## 1 1 1
## 2 2 1
## 3 1 2
setdiff
setdiff(df1, df2)
## # A tibble: 1 × 2
## x y
## <dbl> <dbl>
## 1 2 1
LS0tCnRpdGxlOiAiUmVsYXRpb25hbCBEYXRhIgphdXRob3I6ICJBZGl0aGkgUiBVcGFkaHlhIgpkYXRlOiAiMjAyMi0wOC0wNCIKb3V0cHV0OiAKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiB0cnVlCiAgICB0b2NfZmxvYXQ6IHRydWUKICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCAKICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcgPSBGQUxTRSwgCiAgICAgICAgICAgICAgICAgICAgICBjYWNoZSA9IFRSVUUsIAogICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IEZBTFNFKQpgYGAKCiMjIExvYWQgcGFja2FnZXMKCmBgYHtyIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKYGBgCgojIyBMb29rIGF0IHRoZSBmaXJzdCB0YWJsZSBiYW5kX21lbWJlcnMKCmBgYHtyIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFfQpnbGltcHNlKGJhbmRfbWVtYmVycykKYGBgCiMjIExvb2sgYXQgdGhlIHNlY29uZCB0YWJsZSBiYW5kX2luc3RydW1lbnRzCgpgYGB7ciBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRX0KZ2xpbXBzZShiYW5kX2luc3RydW1lbnRzKSAKYGBgCgojIyBVc2luZyBgaW5uZXJfam9pbmAKCmBgYHtyIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFfQppbm5lcl9qb2luKGJhbmRfaW5zdHJ1bWVudHMsIGJhbmRfbWVtYmVycywgYnkgPSAibmFtZSIpCmBgYAoKIyMgVXNpbmcgYGxlZnRfam9pbmAKCmBgYHtyIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFfQpiYW5kX2luc3RydW1lbnRzICU+JSAKICBsZWZ0X2pvaW4oYmFuZF9tZW1iZXJzLCBieSA9ICJuYW1lIikKYGBgCgojIyBVc2luZyBgcmlnaHRfam9pbmAKCmBgYHtyIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFfQpiYW5kX2luc3RydW1lbnRzICU+JSAKICByaWdodF9qb2luKGJhbmRfbWVtYmVycywgYnkgPSAibmFtZSIpCmBgYAoKCiMjIFVzaW5nIGBmdWxsX2pvaW5gCgpgYGB7ciBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRX0KYmFuZF9pbnN0cnVtZW50cyAlPiUgCiAgZnVsbF9qb2luKGJhbmRfbWVtYmVycywgYnkgPSAibmFtZSIpCmBgYAoKIyMgRHVwbGljYXRlIGtleXMgCgpgYGB7ciBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRX0KeCA8LSB0cmliYmxlKAogIH5rZXksIH52YWxfeCwKICAgICAxLCAieDEiLAogICAgIDIsICJ4MiIsCiAgICAgMiwgIngzIgopCnkgPC0gdHJpYmJsZSgKICB+a2V5LCB+dmFsX3ksCiAgICAgMSwgInkxIiwKICAgICAyLCAieTIiCikKbGVmdF9qb2luKHgsIHksIGJ5ID0gImtleSIpCmBgYAoKCmBgYHtyIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFfQp4IDwtIHRyaWJibGUoCiAgfmtleSwgfnZhbF94LAogICAgIDEsICJ4MSIsCiAgICAgMiwgIngyIiwKICAgICAyLCAieDMiCikKeSA8LSB0cmliYmxlKAogIH5rZXksIH52YWxfeSwKICAgICAxLCAieTEiLAogICAgIDIsICJ5MiIsCiAgICAgMiwgInkzIgopCmxlZnRfam9pbih4LCB5LCBieSA9ICJrZXkiKQpgYGAKCgoKIyMgRGVmaW5pbmcgdGhlIGtleSBjb2x1bW5zCgojIyMgVXNpbmcgZGVmYXVsdCBrZXkKCmBgYHtyIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFfQppbm5lcl9qb2luKGJhbmRfbWVtYmVycywgYmFuZF9pbnN0cnVtZW50cykKYGBgCgojIyMgVXNpbmcgYSBjaGFyYWN0ZXIgdmVjdG9yCgpgYGB7ciBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRX0KaW5uZXJfam9pbihiYW5kX21lbWJlcnMsIGJhbmRfaW5zdHJ1bWVudHMsIGJ5ID0gIm5hbWUiKQpgYGAKCiMjIyBVc2luZyBhIG5hbWVkIGNoYXJhY3RlciB2ZWN0b3IKCmBgYHtyIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFfQppbm5lcl9qb2luKGJhbmRfbWVtYmVycywgYmFuZF9pbnN0cnVtZW50cywgYnkgPSBjKCJuYW1lIiA9ICJuYW1lIikpCmBgYAoKCiMjIFNlbWkgSm9pbiAKCmBgYHtyIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFfQpzZW1pX2pvaW4oYmFuZF9tZW1iZXJzLCBiYW5kX2luc3RydW1lbnRzLCBieSA9IGMoIm5hbWUiID0gIm5hbWUiKSkKYGBgCgojIyBBbnRpIEpvaW4gCgpgYGB7ciBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRX0KYW50aV9qb2luKGJhbmRfbWVtYmVycywgYmFuZF9pbnN0cnVtZW50cywgYnkgPSBjKCJuYW1lIiA9ICJuYW1lIikpCmBgYAoKCgojIyBJbnRlcnNlY3QgCgpgYGB7ciBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRX0KZGYxIDwtIHRyaWJibGUoCiAgfngsIH55LAogICAxLCAgMSwKICAgMiwgIDEKKQpkZjIgPC0gdHJpYmJsZSgKICB+eCwgfnksCiAgIDEsICAxLAogICAxLCAgMgopCgppbnRlcnNlY3QoZGYxLCBkZjIpCmBgYAoKIyMgVW5pb24gCgpgYGB7ciBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRX0KdW5pb24oZGYxLCBkZjIpCmBgYAoKIyMgc2V0ZGlmZiAKCmBgYHtyIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFfQpzZXRkaWZmKGRmMSwgZGYyKQpgYGAKCg==