web-dev-qa-db-fra.com

Comparer si deux objets de trame de données dans R sont égaux?

Comment vérifier si deux objets, par ex. trames de données, la valeur est-elle égale à R?

Par valeur égale, je veux dire que la valeur de chaque ligne de chaque colonne d'une trame de données est égale à la valeur de la ligne et de la colonne correspondantes dans la deuxième trame de données.

45
mindless.panda

Il n'est pas clair ce que signifie tester si deux trames de données sont "à valeur égale" mais pour tester si les valeurs sont les mêmes, voici un exemple de deux trames de données non identiques avec des valeurs égales:

a <- data.frame(x = 1:10)
b <- data.frame(y = 1:10)

Pour tester si toutes les valeurs sont égales:

all(a == b) # TRUE

Pour tester si les objets sont identiques (ils ne le sont pas, ils ont des noms de colonnes différents):

identical(a,b) # FALSE: class, colnames, rownames must all match.
54
David LeBauer

De plus, identique est toujours utile et soutient l'objectif pratique:

identical(a[, "x"], b[, "y"]) # TRUE
14
Brad Horn

Nous pouvons utiliser le package R compare pour tester si les noms de l'objet et les valeurs sont les mêmes, en une seule étape.

a <- data.frame(x = 1:10)
b <- data.frame(y = 1:10)

library(compare)
compare(a, b)
#FALSE [TRUE]#objects are not identical (different names), but values are the same.

Dans le cas où nous ne nous soucions que de l'égalité des valeurs, nous pouvons définir ignoreNames=TRUE

compare(a, b, ignoreNames=T)
#TRUE
#  dropped names

Le paquet a des fonctions intéressantes supplémentaires telles que compareEqual et compareIdentical.

7
milan