r - 根据两个索引向量用值替换 NA

r - Replace NAs with values according to two index vectors

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

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

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

      [,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

理想情况下,将 NA 替换为 [3,V1] = 2752[5,V1] = 2650,和 [7,V1] = 2554。数据框包含超过 250k 个 obs,因此遍历整个过程相当麻烦。

您可以根据自己的目的使用以下功能。

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 循环。

说真的,这里有很多人说 "there aer 10min data r cant handle etc etc." R 不是 excel,创建 R 是为了处理数据