2014-12-27 39 views
0

我試圖創建一個新的數據集,從ds2中刪除一些行(通過與數據集ds1的比較)。我寫了一個函數,應該這樣做:向R中的數據集追加行

compare<-function(ds1,ds2){ 
for(i in 1:length(ds1$long)){ 
    for(j in 1:length(ds2$long)){ 
     if(ds1$long[i]<(ds2$long[j]+500) & ds1$long[i]>(ds2$long[j]-500)){ 
      if(ds1$lat[i]<(ds2$lat[j]+500) & ds1$lat[i]>(ds2$lat[j]-500)){ 
       ds3<-data.frame(merge(ds2[j,],ds3)) 
      } 
     } 
    } 
} 
return(ds3) 
} 

DS3是我想要返回的數據集,它應該由原始數據集DS2的符合上述條件的行形成。 我的功能給我一個錯誤:

Error in as.data.frame(y) : 
argument "y" is not specified and has not a definite value 

是「合併()」的權利建立這樣一個數據集,追加行DS3功能? 如果不是,哪個是正確的功能呢?

謝謝大家提前

編輯:我修改了功能,感謝您的提示,使用

ds3<-data.frame() 
ds3<-rbind(ds3,ds2[j,]) 

,而不是

ds3<-data.frame(merge(ds2[j,],ds3)) 

現在我得到這個錯誤:

Errore in rbind(ds3, ds2[j, ]) : 
no method for coercing this S4 class to a vector 

如果我使用rbind(),我可以使用SpatialPoints嗎? (包含在我的數據集中的數據是空間點)

Edit2:我有2個數據集,一個有330行(不規則網格上的點,ds1),一個有150000行(常規網格上的點,ds2)。我想計算第一個數據集中的變量與第二個數據集中的變量之間的相關性。爲了做到這一點,我想將第二個數據集「縮小」到第一個數據集的維度,只保存兩個數據集中具有相同座標(或準)的點。

+1

嘗試使用'rbind'而不是'merge' – LyzandeR 2014-12-27 15:05:05

+1

初始化'ds3'並使用'rbind'。 – Khashaa 2014-12-27 15:05:36

+0

第1步:子集ds1用'['by conditions第2步'rbind'不應該有它的外觀所需的任何循環。請用數據示例和期望的結果澄清問題 – 2014-12-27 16:59:42

回答

0

沒有一個小例子,這個沒有測試,但如果你是幸福的for循環的性能,那麼這可能是你正在嘗試什麼:

compare<-function(ds1,ds2){ 
for(i in 1:length(ds1$long)){ 
    for(j in i:length(ds2$long)){ # I think starting at 1 will give twice as many hits 
     if(ds1$long[i]<(ds2$long[j]+500) & ds1$long[i]>(ds2$long[j]-500)){ 
      if(ds1$lat[i]<(ds2$lat[j]+500) & ds1$lat[i]>(ds2$lat[j]-500)){ 
       if(length(d3)) { # check to see if d3 exists or not 
       ds3<-rbind(ds3, ds2[,j]) } else { # append as the next row 
       d3 <- ds2[ ,j] } # should only get executed once 
      } 
     } 
    } 
} 
return(ds3) 
} 

我試圖避免重新測試的額外開銷對於j,我匹配你已經有過i,j匹配的地方。再次,我不能確定這是否合適,因爲問題描述仍然不完全清楚。

+0

簽署你的答案是正確的,因爲耐心寫一些代碼並閱讀問題。我又遇到了一些問題,但你的回答很有用。 – Eugen 2015-01-09 09:30:08