Подмножество не работает с некоторыми значениями чисел c, но с другими - PullRequest
1 голос
/ 25 января 2020

Я столкнулся с очень странной проблемой, которую я не знаю, как решить, и никогда не видел. Я могу подмножество data.frame для некоторых, но не для других чисел c значений.

Вот данные, которые я использую:

library(dplyr)
ws <- seq(0, 1, by=.1)
kombos <- expand.grid(weightjaw2 = ws,
                  weightjaw3 = ws) %>% as.data.frame
kombos$kombi <- 1:nrow(kombos)
kombos$weightjaw2 <- as.numeric(kombos$weightjaw2)
kombos$weightjaw3 <- as.numeric(kombos$weightjaw3)
class(kombos$weightjaw2)

[1] "numeric"

Теперь мне нужно поднастроить это data.frame. Это хорошо работает, скажем, например, значение 0.1.

kombos %>% filter(weightjaw2==0.1)
   weightjaw2 weightjaw3 kombi
1         0.1        0.0     2
2         0.1        0.1    13
3         0.1        0.2    24
4         0.1        0.3    35
5         0.1        0.4    46
6         0.1        0.5    57
7         0.1        0.6    68
8         0.1        0.7    79
9         0.1        0.8    90
10        0.1        0.9   101
11        0.1        1.0   112

Как ни странно, это не работает для значений 0.3, 0.6 и 0.7.

kombos %>% filter(weightjaw2==0.3)
[1] weightjaw2 weightjaw3 kombi     
<0 rows> (or 0-length row.names)

То же самое относится к subset(kombos, weightjaw2==0.3). Почему это так и как я могу это решить?

РЕДАКТИРОВАТЬ

Я решил это с помощью dyplyr::near():

kombos %>% filter(near(weightjaw2, 0.3))

1 Ответ

0 голосов
/ 25 января 2020

== требует, чтобы и л, и ч были точно равны. Столбец weightjaw2 не совсем равен 0,3 из-за точных проверок. Одним из вариантов является преобразование столбца в character в filter для подмножества строк

library(dplyr)
kombos %>%
    filter(as.character(weightjaw2) == 0.3)
...