una soporta segundo rapida por para optimizar mas lentas lenta hacer grandes datos cuello cuantas consultas consulta como cantidades botella agilizar database r dataset compare dataframe

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í:

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() .