Вопрос по dataframe, r – Сравните, если два объекта данных в R равны?

43

Как проверить, если два объекта, например, фреймы данных равны ли значения в R?

Под значением равно я имею в виду, что значение каждой строки каждого столбца одного кадра данных равно значению соответствующей строки и столбца во втором кадре данных.

что ты имеешь в виду под "равным значением" David LeBauer
Я проголосовал за закрытие, потому что он слишком неопределенный, чтобы ответить в его текущем состоянии. 42-
?all.equal или?identical? Если это не те два, вам придется расширить свой вопрос, чтобы мы знали, что именно вы пытаетесь сравнить. Justin
ВзглянутьВО Tyler Rinker

Ваш Ответ

3   ответа
51

что значит проверить, равны ли два фрейма данных значениям, но проверить, совпадают ли значения, вот пример двух неидентичных фреймов данных с одинаковыми значениями:

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

Чтобы проверить, все ли значения равны:

all(a == b) # TRUE

Чтобы проверить, идентичны ли объекты (у них нет, у них разные имена столбцов):

identical(a,b) # FALSE: class, colnames, rownames must all match.
В случае, если кто-то запутался, они не идентичны, потому что имена столбцов не совпадают. joran
@ joran спасибо за указание на это, я уточнил свой ответ. David LeBauer
@ DavidLeBauer, есть ли способ заставить идентичный игнорировать порядок? Herman Toothrot
Отметьте, что дляidentical, чтобы вернуть true, должны совпадать не только значения и имена столбцов, но и номера / имена строк. (Это меня поразило при использовании subset (); оказалось, чтоall было то, что я хотел.) Darren Cook
@ user4050 порядок чего? порядок значений? Вы можете отсортировать оба вектора какidentical(sort(a), sort(b)). Abe
12

идентичное все еще полезно и поддерживает практическую цель:

identical(a[, "x"], b[, "y"]) # TRUE
5

Мы можем использовать пакет Rcompare, чтобы проверить, совпадают ли имена объекта и значения, всего за один шаг.

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.

В случае, если мы заботимся только о равенстве значений, мы можем установитьignoreNames=TRUE

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

Пакет имеет дополнительные интересные функции, такие какcompareEqual а такжеcompareIdentical.

Похожие вопросы