Почему эта попытка сопоставить строки в R не работает? - PullRequest
0 голосов
/ 30 марта 2020

Итак, у меня очень большие строки данных (~ 10 ^ 5); каждая строка содержит широту, долготу и классификацию в системе классификации климата KG. Я написал следующий код, который должен быть в состоянии взять произвольную пару долгота-широта и вернуть номер строки, который наиболее точно соответствует. Это просто не работает. Я просмотрел в Интернете довольно много вопросов, касающихся Index-and-Match в R, но ничего не получилось.

    KGlookup <- function(longitude, latitude)
{
  lat = 0.5*round(latitude*2, 0) + 0.25
  lon = 0.5*round(longitude*2, 0) + 0.25 
  lonlat = c(lon, lat)
  lonlat <- as.data.frame(lonlat)
  tada = match(lonlat, pvpstry)
  return(tada)
}

Заранее спасибо!

Редактировать: ответить на комментарий:


> dput(pvpstry[1:50,])
structure(list(V1 = c(-179.75, -179.25, -178.75, -178.25, -177.75, 
-177.25, -176.75, -176.25, -175.75, -175.25, -174.75, -174.25, 
-173.75, -173.25, -172.75, -172.25, -171.75, -171.25, -170.75, 
-170.25, -169.75, -169.25, -168.75, -168.25, -167.75, -167.25, 
-166.75, -166.25, -165.75, -165.25, -164.75, -164.25, -163.75, 
-163.25, -162.75, -162.25, -161.75, -161.25, -160.75, -160.25, 
-159.75, -159.25, -158.75, -158.25, -157.75, -157.25, -156.75, 
-156.25, -155.75, -155.25), V2 = c(-89.75, -89.75, -89.75, -89.75, 
-89.75, -89.75, -89.75, -89.75, -89.75, -89.75, -89.75, -89.75, 
-89.75, -89.75, -89.75, -89.75, -89.75, -89.75, -89.75, -89.75, 
-89.75, -89.75, -89.75, -89.75, -89.75, -89.75, -89.75, -89.75, 
-89.75, -89.75, -89.75, -89.75, -89.75, -89.75, -89.75, -89.75, 
-89.75, -89.75, -89.75, -89.75, -89.75, -89.75, -89.75, -89.75, 
-89.75, -89.75, -89.75, -89.75, -89.75, -89.75)), row.names = c(NA, 
50L), class = "data.frame")
> 


1 Ответ

0 голосов
/ 30 марта 2020

Один из подходов заключается в использовании логических сравнений.

KGlookup <- function(longitude, latitude)
{
  lat = 0.5*round(latitude*2, 0) + 0.25
  lon = 0.5*round(longitude*2, 0) + 0.25 
  tada = which(pvpstry[,1] == lon & pvpstry[,2] == lat)
  return(tada)
}
KGlookup(-172.25,-89.75)
# [1] 17
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...