2014-01-24 40 views
1

我對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.085(從你不利的證據,你提供,很可能略小於0.085):

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

正如你可以看到,即使在實際值數據幀略小於0.085,當我輸出數據幀時,數據幀顯示爲0.085。

您在帖子子集中提供的代碼與您的變量完全等於0.085的行相同。如果你想獲得非常接近行(在此代碼,在6位小數),你可以試試:

subset(df, round(x, digits=6) == 0.085) 
#  x 
# 1 0.085 
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 
+0

找出爲什麼一些爲推薦前不準確是非常重要的人們用寬容來搜索。容差引入誤報,可能會導致錯誤而不是補救錯誤。而且,即使公差適當,絕對測試也不適用於所有情況。涉及的錯誤可能是絕對的,相對於最終值而言,相對於某些輸入值或多個值的複雜函數。簡單地選擇諸如.0001之類的值並將其與絕對差異進行比較並不是一個好工程。 –