Base R:filter和equals运算符的奇怪行为

时间:2018-02-12 15:58:22

标签: r dplyr

我有一个带有 var 的数字列的 pan

> class(pan$variable)
[1] "numeric"

它有一组0.8到0.9的值:

> unique(pan$variable)
[1] 0.800 0.825 0.850 0.875 0.900

但是,当我尝试在 var 的特定值上过滤 pan 时,它仅适用于某些值!

预期行为:

> filter(pan,variable == 0.8)
# A tibble: 510 x 20

异常行为:

> filter(pan,variable == 0.825)
# A tibble: 0 x 20

事实上,在这种情况下,我只得到0.8,0.875和0.9的结果!过滤器不会为0.825和0.85带来任何结果。

> filter(pan,variable == 0.85)
# A tibble: 0 x 20

我尝试重启我的RStudio会话,但行为没有变化。我已经构建了自己的“过滤器”功能,并且异常行为仍在继续:

sum <- 0
for (i in 1:nrow(pan)) {
  if (pan$variable[i] == 0.8) {
     sum <- sum + 1
  }
}
print(sum)

当我为0.8,0.875和0.9的值运行这个小过滤器函数时,它返回值〜510,如预期的那样,但是对于0.825和0.85的值,它返回0。

> pan$variable[511]
[1] 0.825
> pan$variable[511]==0.825
[1] FALSE

有没有人在R中遇到过这种奇怪的行为?我错过了什么,因为我已经确认 var 的类是数字,但是对于某些值不会测试为TRUE?

0 个答案:

没有答案