查找值等于您的值的子集

时间:2014-01-24 21:51:28

标签: r floating-point dataframe subset

我是R的新手并试图识别特定的一行数据。我想要ideology等于0.085的人。当我进入

subset(ideal112, ideology == 0.085) 

我得到了

[1] name     state    cd       party    ideology

<0 rows> (or 0-length row.names)

我不明白为什么会发生这种情况,因为有一个ideology0.085的数据点。当我输入

subset(ideal112, ideology <= 0.085)

此数据点出现。但是,我需要将R缩小到相等的位置。我不明白为什么==不起作用。谢谢!

2 个答案:

答案 0 :(得分:3)

这可能与内部如何表示浮点数有关。因此,您应该包含一些容差

,而不是寻找完全匹配

这失败了:

> a <- data.frame(x=rnorm(11), y=seq(0,1,.1))
> subset(a,y == .3)
[1] x y
<0 rows> (or 0-length row.names)

这有效

> subset(a, abs(y - .3) < .0001)
           x   y
4 0.04255609 0.3

答案 1 :(得分:2)

您的数据框中的值可能不完全等于0.085(根据您提供的证据,它可能略小于0.085):

df = data.frame(x=0.0849999999)
df
#       x
# 1 0.085

正如您所看到的,即使数据框中的实际值略小于0.085,当我输出数据框时,它仍然可以打印到0.085。

您在post子集中提供的代码到您的变量正好等于0.085的行。如果您想获得非常接近的行(在此代码中,小数点后6位),请尝试以下操作:

subset(df, round(x, digits=6) == 0.085)
#       x
# 1 0.085