我是R的新手并试图识别特定的一行数据。我想要ideology
等于0.085
的人。当我进入
subset(ideal112, ideology == 0.085)
我得到了
[1] name state cd party ideology
<0 rows> (or 0-length row.names)
我不明白为什么会发生这种情况,因为有一个ideology
为0.085
的数据点。当我输入
subset(ideal112, ideology <= 0.085)
此数据点出现。但是,我需要将R缩小到相等的位置。我不明白为什么==不起作用。谢谢!
答案 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