database - soporta - optimizar consultas mysql explain
Cómo verificar si dos marcos de datos son iguales (2)
Busca todo lo que sea. Tiene algunos pilotos, pero podría funcionar para usted.
all.equal(df3,df4)
# [1] TRUE
all.equal(df2,df1)
# [1] TRUE
Esta pregunta ya tiene una respuesta aquí:
- Con respecto a la comparación de matrices en R 1 respuesta
Digamos que tengo grandes conjuntos de datos en R y solo quiero saber si dos de ellos son iguales. Uso esto a menudo cuando estoy experimentando diferentes algoritmos para lograr el mismo resultado. Por ejemplo, digamos que tenemos los siguientes conjuntos de datos:
df1 <- data.frame(num = 1:5, let = letters[1:5])
df2 <- df1
df3 <- data.frame(num = c(1:5, NA), let = letters[1:6])
df4 <- df3
Así que esto es lo que hago para compararlos:
table(x == y, useNA = ''ifany'')
Lo que funciona muy bien cuando los conjuntos de datos no tienen NA:
> table(df1 == df2, useNA = ''ifany'')
TRUE
10
Pero no tanto cuando tienen NA:
> table(df3 == df4, useNA = ''ifany'')
TRUE <NA>
11 1
En el ejemplo, es fácil descartar la NA
como un problema, ya que sabemos que ambos marcos de datos son iguales. El problema es que NA == <anything>
produce NA
, por lo que cada vez que uno de los conjuntos de datos tiene un NA
, no importa lo que tenga el otro en esa misma posición, el resultado siempre será NA
.
Así que usar la table()
para comparar conjuntos de datos no me parece ideal. ¿Cómo puedo verificar si dos marcos de datos son idénticos?
PD: Note que esto no es un duplicado de R: comparando varios conjuntos de datos , comparando 2 conjuntos de datos en R o comparando conjuntos de datos en R
Como señalaron las Metrics , también se podría usar identical()
para comparar los conjuntos de datos. La diferencia entre este enfoque y el de Codoremifa es que identical()
solo producirá TRUE
de FALSE
, dependiendo de si los objetos que se comparan son idénticos o no, mientras que all.equal()
devolverá TRUE
o sugerencias sobre las diferencias entre los objetos . Por ejemplo, considere lo siguiente:
> identical(df1, df3)
[1] FALSE
> all.equal(df1, df3)
[1] "Attributes: < Component 2: Numeric: lengths (5, 6) differ >"
[2] "Component 1: Numeric: lengths (5, 6) differ"
[3] "Component 2: Lengths: 5, 6"
[4] "Component 2: Attributes: < Component 2: Lengths (5, 6) differ (string compare on first 5) >"
[5] "Component 2: Lengths (5, 6) differ (string compare on first 5)"
Además, por lo que he probado, identical()
parece correr mucho más rápido que all.equal()
.