我有一个问题,而试图过滤df,我不明白为什么。问题就这么简单:
view(df)
class(df)
.class2(df[[1]])
df
f <- df[df[,1] == 1,]
f
,输出如下:
> class(df)
[1] "data.frame"
> .class2(df[,1])
[1] "double" "numeric"
> df
cod uncod
1 -0.8333333 0.040
2 -0.8333333 0.040
3 -0.8333333 0.040
4 -0.8333333 0.040
5 -1.0000000 0.038
6 -1.0000000 0.038
7 1.0000000 0.062
8 1.0000000 0.062
9 -0.8333333 0.040
10 -0.8333333 0.040
11 -0.8333333 0.040
> f <- df[df[,1] == 1,]
> f
[1] cod uncod
<0 Zeilen> (oder row.names mit Länge 0)
虽然这样做很好:
f <- df[df[,1] == -1,]
> f
cod uncod
5 -1 0.038
6 -1 0.038
>
我真的不明白发生了什么,因为它正在处理一个新的data.frame:
df2<-data.frame(cod=c(-0.83,-1,0,1),uncod=c(0.040,0.038,0.05,0.062))
> f2 <- df[df[,1] == 1,]
> f2
cod uncod
4 1 0.062
>
我的第一个df有什么问题?对不起,我没有一个代表性的例子,但是data.frame来自一个更大的代码。
多亏了这些评论,我找到了解决方案。是浮点精度的问题。在
附近使用dplyr::可以正常工作x <- 1 # Filter criteria
f <- df %>% filter(near(df[[1]],x)==TRUE)
不如基本函数好,但它可以工作。