R улучшение кода с поднабором и добавление двух столбцов - PullRequest
0 голосов
/ 06 февраля 2020

Мне нужна помощь, чтобы улучшить часть моего кода (я новичок). У меня есть большая база данных (flussi_coord) со столбцом, содержащим названия разных регионов. Каждый регион связан со складом, и мне нужно добавить два столбца с его координатами в flussi_coord; они содержатся в другой матрице с именемordin_oba. oba - это просто список регионов, созданных с помощью уровней (flussi_coord $ oba).

Решение, которое я придумал, работает, но оно очень медленное. Для каждой строки flussi_coord я проверяю, есть ли переписка с именем в oba; если это правда, я вставляю долготу и широту хранилища в два вектора, которые позже добавляются в flussi_coord.

for (k in 1:dim(flussi_coord)[1]) {      
  for (i in 1:length(oba)) {             
    if (flussi_coord[k,5] == oba[i]) {
      LongMag[k] <- coord_oba[i,1]
      LatMag[k] <- coord_oba[i,2]
    }
  }
}
flussi_coord <- cbind(flussi_coord, LongMag, LatMag)

Я знаю, что мне нужно каким-то образом фильтровать базу данных, выбирая строки, которые соответствуют определенному региону добавьте два столбца и выполните итерации для других регионов. Я пытался найти похожие решения, но я просто не могу запустить код.

#this doesn't work
for (i in 1:length(oba)) {
  flussi_coord[which(flussi_coord$OBA == oba[i]), ]$Longititudine_magazzino <- coord_oba[i,1]
  flussi_coord[which(flussi_coord$OBA == oba[i]), ]$Latitudine_magazzino <- coord_oba[i,2]
}

Заранее спасибо за помощь!

1 Ответ

0 голосов
/ 06 февраля 2020

Предполагая, что наборы данных являются фреймом данных, это должно работать:

flussi_coord$LongMag <- coord_oba[match(flussi_coord[,5], oba),1]
flussi_coord$LatMag <- coord_oba[match(flussi_coord[,5], oba),2]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...