These functions override the set functions provided in base to make them generic so that efficient versions for data frames and other tables can be provided. The default methods call the base versions. Beware that intersect(), union() and setdiff() remove duplicates.

intersect(x, y, ...)

union(x, y, ...)

union_all(x, y, ...)

setdiff(x, y, ...)

setequal(x, y, ...)

Arguments

x, y

objects to perform set function on (ignoring order)

...

other arguments passed on to methods

Examples

mtcars$model <- rownames(mtcars) first <- mtcars[1:20, ] second <- mtcars[10:32, ] intersect(first, second)
#> mpg cyl disp hp drat wt qsec vs am gear carb model #> 1 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 Merc 280 #> 2 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 Merc 280C #> 3 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 Merc 450SE #> 4 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 Merc 450SL #> 5 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 Merc 450SLC #> 6 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 Cadillac Fleetwood #> 7 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 Lincoln Continental #> 8 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 Chrysler Imperial #> [ reached getOption("max.print") -- omitted 3 rows ]
union(first, second)
#> mpg cyl disp hp drat wt qsec vs am gear carb model #> 1 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2 Volvo 142E #> 2 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8 Maserati Bora #> 3 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6 Ferrari Dino #> 4 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4 Ford Pantera L #> 5 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 Lotus Europa #> 6 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 Porsche 914-2 #> 7 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 Fiat X1-9 #> 8 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2 Pontiac Firebird #> [ reached getOption("max.print") -- omitted 24 rows ]
setdiff(first, second)
#> mpg cyl disp hp drat wt qsec vs am gear carb model #> 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4 #> 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 Mazda RX4 Wag #> 3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 Datsun 710 #> 4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 Hornet 4 Drive #> 5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 Hornet Sportabout #> 6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 Valiant #> 7 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 Duster 360 #> 8 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 Merc 240D #> [ reached getOption("max.print") -- omitted 1 row ]
setdiff(second, first)
#> mpg cyl disp hp drat wt qsec vs am gear carb model #> 1 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 Toyota Corona #> 2 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2 Dodge Challenger #> 3 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 AMC Javelin #> 4 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4 Camaro Z28 #> 5 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2 Pontiac Firebird #> 6 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 Fiat X1-9 #> 7 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 Porsche 914-2 #> 8 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 Lotus Europa #> [ reached getOption("max.print") -- omitted 4 rows ]
union_all(first, second)
#> mpg cyl disp hp drat wt qsec vs am gear carb model #> 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4 #> 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 Mazda RX4 Wag #> 3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 Datsun 710 #> 4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 Hornet 4 Drive #> 5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 Hornet Sportabout #> 6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 Valiant #> 7 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 Duster 360 #> 8 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 Merc 240D #> [ reached getOption("max.print") -- omitted 35 rows ]
setequal(mtcars, mtcars[32:1, ])
#> TRUE
# Handling of duplicates: a <- data.frame(column = c(1:10, 10)) b <- data.frame(column = c(1:5, 5)) # intersection is 1 to 5, duplicates removed (5) intersect(a, b)
#> column #> 1 1 #> 2 2 #> 3 3 #> 4 4 #> 5 5
# union is 1 to 10, duplicates removed (5 and 10) union(a, b)
#> column #> 1 10 #> 2 9 #> 3 8 #> 4 7 #> 5 6 #> 6 5 #> 7 4 #> 8 3 #> 9 2 #> 10 1
# set difference, duplicates removed (10) setdiff(a, b)
#> column #> 1 6 #> 2 7 #> 3 8 #> 4 9 #> 5 10
# union all does not remove duplicates union_all(a, b)
#> column #> 1 1 #> 2 2 #> 3 3 #> 4 4 #> 5 5 #> 6 6 #> 7 7 #> 8 8 #> 9 9 #> 10 10 #> 11 10 #> 12 1 #> 13 2 #> 14 3 #> 15 4 #> 16 5 #> 17 5