r - заменить NA значениями в соответствии с двумя индексными векторами

У меня есть пространственные данные с характеристиками домов, проданных за несколько лет. Я добавил к нему атрибуты окрестности, используя "over" в {sp}. Для каждого года моих данных о жилье есть объединенный набор данных соседства.

Проблема: данные о соседстве за разные годы не всегда содержат одни и те же переменные. Поэтому, когда я присоединяюсь к данным по жилью, я получаю НС по этим переменным, не относящимся к общей структуре, для домов, проданных в определенные годы.

Идеальное решение: для каждой строки в моих данных замените NA на те же данные столбца (V1) из той же окрестности (nb), но ближайшего доступного года (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

В идеале заменить NA так, чтобы [3,V1] = 2752; [5,V1] = 2650, а также [7,V1] = 2554, Фрейм данных содержит более 250 тыс. Объектов, поэтому циклическая обработка данных довольно громоздка.

1 ответ

Решение

Вы можете использовать функцию ниже для вашей цели.

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 в этом случае.

Серьезно, есть много людей, которые говорят: "Там 10 минут, данные не могут быть обработаны и т. Д. И т. Д." R не является превосходным, R создан для обработки данных

Другие вопросы по тегам