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 создан для обработки данных