all_equal() allows you to compare data frames, optionally ignoring
row and column names. It is questioning as of dplyr 1.0.0, because it
seems to solve a problem that no longer seems that important.
all_equal(
target,
current,
ignore_col_order = TRUE,
ignore_row_order = TRUE,
convert = FALSE,
...
)Two data frames to compare.
Should order of columns be ignored?
Should order of rows be ignored?
Should similar classes be converted? Currently this will convert factor to character and integer to double.
Ignored. Needed for compatibility with all.equal().
TRUE if equal, otherwise a character vector describing
the reasons why they're not equal. Use isTRUE() if using the
result in an if expression.
scramble <- function(x) x[sample(nrow(x)), sample(ncol(x))]
# By default, ordering of rows and columns ignored
all_equal(mtcars, scramble(mtcars))
#> [1] TRUE
# But those can be overriden if desired
all_equal(mtcars, scramble(mtcars), ignore_col_order = FALSE)
#> Same column names, but different order.
all_equal(mtcars, scramble(mtcars), ignore_row_order = FALSE)
#> [1] "Same row values, but different order"
# By default all_equal is sensitive to variable differences
df1 <- data.frame(x = "a", stringsAsFactors = FALSE)
df2 <- data.frame(x = factor("a"))
all_equal(df1, df2)
#> Different types for column `x`: character vs factor<4d52a>.
# But you can request dplyr convert similar types
all_equal(df1, df2, convert = TRUE)
#> [1] TRUE