【发布时间】:2020-01-24 21:50:44
【问题描述】:
我遇到了一个非常奇怪的问题,我不知道如何解决,也从未见过。我可以将data.frame 子集化为一些但不能用于其他数值。
这是我使用的数据:
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))
【问题讨论】:
-
这将是一个浮点问题您可以检查差异
kombos$weightjaw2 - 0.3 -
一个选项是在转换为
characterkombos %>% filter(as.character(weightjaw2) == 0.3)后filter