2 числа в R не равны, несмотря на то, что они одинаковы, в left_join происходит сбой - PullRequest
0 голосов
/ 20 апреля 2019

У меня странная проблема, при попытке сделать left_join из dplyr между двумя кадрами данных, скажем table_a и table_b, у которых есть общий столбец C, я получаю много NA с за исключением случаев, когда значения равны нулю в обоих, хотя значения в строках совпадают чаще.

Одна вещь, которую я заметил, состояла в том, что столбец C в table_b, которому я хотел бы соответствовать, имеет значения 0 как 0.0, тогда как в table_a, 0 отображается просто 0.

Образец здесь

head(table_a) дает

  likelihood_ols LR_statistic_ols decision_ols   C
1       -1.51591          0.20246            0 -10
2       -1.51591          0.07724            0  -9
3       -1.51591          0.00918            0  -8
4       -1.51591          0.00924            0  -7
5       -1.51591          0.08834            0  -6
6       -1.51591          0.25694            0  -5

а другой здесь

head(table_b)

quantile    C pctile
1  2.96406  0.0     90
2  4.12252  0.0     95
3  6.90776  0.0     99
4  2.78129 -1.8     90
5  3.92385 -1.8     95
6  6.77284 -1.8     99

Теперь между столбцами C есть определенное совпадение, но найдены только нули, что сбивает с толку.

Когда я подставляю уникальные значения в столбцы C в соответствии с a <- sort(unique(table_a$C)) и b <- sort(unique(table_b$C)) Я получаю следующий сбивающий с толку вывод:

> a[2]
[1] -9
> b[56]
[1] -9
> a[2]==b[56]
[1] FALSE

Может кто-нибудь помочь мне разобраться, что здесь происходит? Я читаю значения, используя read.csv, а csv генерируются один раз в CentOS и один раз в RedHat / Fedora, если это вообще играет роль. Я попытался заставить их быть тибблами или сначала в виде символов, а затем чисел, а также проверил все классы R, а также проверил обсуждаемые типы здесь , но безрезультатно, и все они совпадают.

Что еще может сделать их разными, и как мне сказать R, что они есть, чтобы я мог запустить свою функцию слияния? Большое спасибо!

1 Ответ

1 голос
/ 20 апреля 2019

То, что два числа с плавающей точкой выводят одинаково, не означает, что они идентичны.

Достаточно простое решение - округлить, например:

table_a$new_a_likelihood_ols <- signif(table_a$likelihood_ols, 6)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...