r - 根据两个索引向量将NAs替换为值

时间:2016-06-14 12:36:29

标签: r na sp spatial-data-frame

我有一个空间点数据框架,其中包含销售数年的房屋特征。 我在{sp}中使用“over”附加了邻域属性。对于我的住房数据的每一年,都有一个社区的数据集加入。

问题:不同年份的邻域数据并不总是包含相同的变量。因此,当加入住房数据时,我在这些非共享变量中获得了在某些特定年份出售的房屋的NA。

理想的解决方案:对于我的数据中的每一行,用相同的邻域(nb)替换具有相同列数据(V1)的NA,但是最接近的年份(y)。

      [,y]  [,nb] [,V1]
 [1,] 1993 30000 2752
 [2,] 1993 30000 2752
 [3,] 1994 30000 NA
 [4,] 1994 50000 2554
 [5,] 1995 30000 NA
 [6,] 1996 30000 2650
 [7,] 1996 50000 NA

理想情况下,替换NAs [3,V1] = 2752; [5,V1] = 2650[7,V1] = 2554。数据框包含超过250k的obs,所以循环整个过程相当麻烦。

1 个答案:

答案 0 :(得分:0)

您可以将以下功能用于您的目的。

get_rid_of_NAs <- function(urmatrix) {
  myvector <- vector()
  counter <- 0
  myvector_1 <- vector()

  for(i in 1:nrow(urmatrix)){
   out <- urmatrix[i,2]
   out_1 <- urmatrix[i,1]
   myvector_1 <- c(myvector_1,out_1)
   myvector <- c(myvector,out)

   if(urmatrix[i,3]!=NA){
   next
   }      
   orders <- order(myvector[myvector==out],decreasing=TRUE)
   index <- which.min(myvector_1[orders])    
   urmatrix[i,3] <- urmatrix[index,3]
   }
 return(urmatrix)
}

现在使用该函数进行计算。

           get_rid_of_NAs(ENTERYOURMATRIXHERE.)

R可以轻松处理这样的循环,但在这种情况下我建议使用for循环。

严重的是,这里有很多人说&#34;有10分钟的数据无法处理等等。&#34; R不是excel,创建R来处理数据