/ / Ako skontrolovať, či sú dva dátové rámce rovnaké [duplikát] - databáza, r, množina údajov, porovnanie, údajový rámec

Ako skontrolovať, či sú dva dátové rámce rovnaké [duplicitné] - databáza, r, dataset, porovnanie, dátový rámec

Povedzme, že mám veľké súbory údajov v R a chcem lenvedieť, či sú dvaja rovnaké. Toto často používam, keď experimentujem s rôznymi algoritmami, aby som dosiahol rovnaký výsledok. Napríklad povedzme, že máme nasledujúce súbory údajov:

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

Takto ich porovnávam:

table(x == y, useNA = "ifany")

Čo funguje skvele, keď súbory údajov neobsahujú NA:

> table(df1 == df2, useNA = "ifany")
TRUE
10

Ale nie toľko, keď majú NA:

> table(df3 == df4, useNA = "ifany")
TRUE <NA>
11    1

V príklade je ľahké prepustiť NA ako problém, pretože vieme, že obidva dátové rámce rovnať. Problém je v tom NA == <anything> výťažky NA, takže vždy, keď má jeden zo súborov údajov NA, nezáleží na tom, čo má ten druhý na tej istej pozícii, výsledok bude vždy NA.

Takže pomocou table() na porovnanie údajov sa mi nezdá ideálny. Ako môžem lepšie skontrolovať, či sú dva dátové rámce rovnaké?

Poznámka: Toto nie je duplikát R - porovnanie viacerých súborov údajov, Porovnávam 2 súbory údajov v R alebo Porovnať súbory údajov v R

odpovede:

40 pre odpoveď č. 1

Vyhľadajte všetko. Má niekoľko jazdcov, ale môže to fungovať pre vás.

all.equal(df3,df4)
# [1] TRUE
all.equal(df2,df1)
# [1] TRUE

14 pre odpoveď č. 2

ako metriky zdôraznil, jeden by mohol tiež použiť identical() na porovnanie množín údajov. Rozdiel medzi týmto prístupom a prístupom Codoremifa je to tak identical() len prinesie TRUE z FALSE, v závislosti od toho, či porovnávané objekty sú rovnaké alebo nie, zatiaľ čo all.equal() buď sa vráti TRUE alebo rady o rozdieloch medzi objektmi. Zvážte napríklad toto:

> 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)"

Navyše, z toho, čo som testoval identical() Zdá sa, že beží oveľa rýchlejšie ako all.equal().