Skip to contents

Join two data frames together.

Usage

join_left(x, y, by = NULL, suffix = c(".x", ".y"), backend = "merge")

join_right(x, y, by = NULL, suffix = c(".x", ".y"), backend = "merge")

join_inner(x, y, by = NULL, suffix = c(".x", ".y"), backend = "merge")

join_full(x, y, by = NULL, suffix = c(".x", ".y"), backend = "merge")

Arguments

x, y

A data frame.

by

A character vector of variables to join by. Defaults to using the common names across the two data frames.

suffix

A character vector of length 2. Duplicated variables that are not joined by will have this suffix added to their names.

backend

A character string of the codebase to use for joining. Options are "merge" (base::merge()) or "plyr" (plyr::join()). Defaults to "merge".

Value

data.frame

Details

Rownames are dropped. Attributes are dropped. Be careful joining by columns that have different classes or factor levels. If mixed character/factor columns are joined by, then output should be coerced to character. If columns with different factor levels are joined by, then will be automatically reordered.

References

Hadley Wickham (2014). plyr: Tools for Splitting, Applying and Combining Data. R package version 1.8.4. https://CRAN.R-project.org/package=plyr. Git commit fe192412748d1ccb6d524caeb5bcf2b5c474fd46

Examples

#----------------------------------------------------------------------------
# join_*() examples
#----------------------------------------------------------------------------
library(bkdat)

df1 <- data.frame(
  a = letters[1:3],
  b = letters[4:6],
  c = letters[7:9],
  stringsAsFactors = FALSE
)
df2 <- data.frame(
  a = letters[2:4],
  b = letters[10:12],
  d = letters[13:15],
  stringsAsFactors = FALSE
)

df1
#>   a b c
#> 1 a d g
#> 2 b e h
#> 3 c f i
df2
#>   a b d
#> 1 b j m
#> 2 c k n
#> 3 d l o

join_left(df1, df2, by = "a")
#>   a b.x c  b.y    d
#> 1 b   e h    j    m
#> 2 c   f i    k    n
#> 3 a   d g <NA> <NA>
join_right(df1, df2, by = "a")
#>   a  b.x    c b.y d
#> 1 b    e    h   j m
#> 2 c    f    i   k n
#> 3 d <NA> <NA>   l o
join_inner(df1, df2, by = "a")
#>   a b.x c b.y d
#> 1 b   e h   j m
#> 2 c   f i   k n
join_full(df1, df2, by = "a")
#>   a  b.x    c  b.y    d
#> 1 b    e    h    j    m
#> 2 c    f    i    k    n
#> 3 a    d    g <NA> <NA>
#> 4 d <NA> <NA>    l    o