2011-09-06 64 views
4

這對我來說已經奏效了,但現在不行了,我在這裏尋求幫助之前花了兩天的時間修補它。 我有兩個數據集,一個叫Access,另一個叫CO2。每個人都有四個變量,其中兩個是常見的,我想用來合併兩個數據集。剛玩真的保存,我貼頭()和STR()輸出這裏:R合併()不能按預期工作(已經)

> head(Access)      > head(CO2) 
     x  y access      x  y CO2equ 
1 -32.65 83.65 0.00    1 -32.65 83.65 183316.4 
2 -36.85 83.55 4481.25    2 -36.85 83.55 173327.8 
3 -36.75 83.55 4464.75    3 -36.75 83.55 301413.9 
4 -36.65 83.55 4448.25    4 -36.65 83.55 360757.2 
5 -36.55 83.55 4431.00    5 -36.55 83.55 409523.5 
6 -36.45 83.55 4414.50    6 -36.45 83.55 448302.0 

> str(Access)          
'data.frame': 2183106 obs. of 3 variables:  
$ x  : num -32.7 -36.8 -36.8 -36.7 -36.5 ... 
$ y  : num 83.7 83.5 83.5 83.5 83.5 ...   
$ access: num 0 4481 4465 4448 4431 ...   
- attr(*, "data_types")= chr "N" "N" "N"   

> str(CO2) 
'data.frame': 2183106 obs. of 3 variables: 
$ x  : num -32.7 -36.9 -36.8 -36.7 -36.6 ... 
$ y  : num 83.6 83.5 83.5 83.5 83.5 ... 
$ CO2equ: num 183316 173328 301414 360757 409523 ... 
- attr(*, "data_types")= chr "N" "N" "N" 

現在我想合併的版本()。第一個結果在一個空data.frame,所有行中的第二現有兩次,一次用於從所述第一數據集的變量,並與來自第二數據集的變量的第二:

> M1 = merge(Access, CO2, c("x","y")) 
> head(M1) 
[1] x  y  access CO2equ 
<0 rows> (or 0-length row.names) 

> M2 = merge(Access, CO2, by=c("x","y"), all=TRUE) 
> length(M2$x) 
[1] 4366212 
> head(M2) 
     x  y access CO2equ 
1 -179.95 -89.95  NA  0 
2 -179.95 -89.85  NA  0 
3 -179.95 -89.75  NA  0 
4 -179.95 -89.65  NA  0 
5 -179.95 -89.55  NA  0 
6 -179.95 -89.45  NA  0 

顯然,相應的x和y值不被認爲是等價的 - 但我不知道爲什麼。數據類型相同,數值看起來相同,最糟糕的是,我幾個月前成功完成了這項工作。那時候,我放棄了命令歷史,現在當我複製並粘貼到我的R控制檯時,它不起作用。我在R 2.13.0和Revolution R Enterprise 4.3中都試過。我有理由相信,這不是一個軟件錯誤,而是一些微不足道的東西,即使在這之後花了兩天時間,我也忽略了它。

乾杯,
約亨

+1

您應該將'dput()'的輸出添加到您的問題中,因爲您的示例適用於我。 – Chase

+4

我懷疑x和y有一些數字沒有被顯示。 –

+2

同意gsk3。您隱式測試浮點數是否相等,並且很可能被常見問題解答7.31絆住:http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think-these - 值 - 是 - equal_003f –

回答

3

嘗試圓(...,1)在合併之前x和y。