R 查找值等于您的值的子集

R 查找值等于您的值的子集,r,floating-point,dataframe,subset,R,Floating Point,Dataframe,Subset,我对R非常陌生,并试图识别特定的一行数据。我想要意识形态等于0.085的人。我进去的时候 subset(ideal112, ideology == 0.085) 我明白了 [1] name state cd party ideology <0 rows> (or 0-length row.names) 这个数据点出现了。然而,我需要让R缩小到它相等的地方。我不明白为什么==不起作用。谢谢大家! 根据您提供的证据,您的数据框中的值可能不完全等于0

我对R非常陌生,并试图识别特定的一行数据。我想要意识形态等于0.085的人。我进去的时候

subset(ideal112, ideology == 0.085) 
我明白了

[1] name     state    cd       party    ideology

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

这个数据点出现了。然而,我需要让R缩小到它相等的地方。我不明白为什么==不起作用。谢谢大家!

根据您提供的证据,您的数据框中的值可能不完全等于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

根据您提供的证据,数据框中的值可能不完全等于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

这可能与浮点数在内部的表示方式有关。因此,与其寻找精确的匹配,不如加入一些公差

这失败了:

> 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

这可能与浮点数在内部的表示方式有关。因此,与其寻找精确的匹配,不如加入一些公差

这失败了:

> 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

在建议人们以宽容的态度搜索之前,找出数字不准确的原因是很重要的。公差会引入误报,可能导致错误,而不是修复错误。此外,即使公差适当,绝对测试也不适用于所有情况。所涉及的误差可能是绝对误差、相对于最终值、相对于某些输入值或多个值的复杂函数。从空气中简单地选取一个值,如.0001,并将其与绝对差值进行比较,这不是一个好的工程。在建议人们搜索时,找出一个数字不准确的原因是很重要的。公差会引入误报,可能导致错误,而不是修复错误。此外,即使公差适当,绝对测试也不适用于所有情况。所涉及的误差可能是绝对误差、相对于最终值、相对于某些输入值或多个值的复杂函数。简单地从空气中选取一个值,例如.0001,并将其与绝对差值进行比较,这不是一个好的工程。