2015-01-24 4 views
2

У меня очень большой набор данных, который включает в себя длинные/лат и среднее количество осадков (appt). Я пытаюсь интерполировать некоторые дополнительные точки данных, чтобы создать ggplot среднего количества осадков над выбранными состояниями. Однако я не уверен, как точно интерполировать данные. Результаты функции interp производят NA с.Interpolate Пространственные данные

Как бы интерполировать дополнительные точки данных (~ 5000 кв. М) при заданной долготе/широте?

Почему я получаю NA с при использовании функции interp?

dput:

data <- structure(list(longitude = c(-91.40953, -90.30213, -89.26907, 
    -93.32515, -94.13632), latitude = c(33.403216, 34.505369, 32.438327, 
    36.283347, 39.28965), APPT = c(90.4899996121724, 50.4899996121724, 
    30.4899996121724, 70.4899996121724, 93.4899996121724)), .Names = c("longitude", 
    "latitude", "APPT"), row.names = c(NA, 5L), class = "data.frame") 

Текущий код:

library(akima) 

sp_data <- interp(x = data$longitude, 
        y = data$latitude, 
        z = data$APPT) 

dInterp <- data.frame(expand.grid(x = sp_data$x, 
            y = sp_data$y), z = c(sp_data$z)) 

Выходной ток: head(dInterp)

  x  y z 
1 -94.13632 32.43833 NA 
2 -94.01152 32.43833 NA 
3 -93.88672 32.43833 NA 
4 -93.76192 32.43833 NA 
5 -93.63711 32.43833 NA 
6 -93.51231 32.43833 NA 
+0

Я не уверен точно, о чем вы просите, но однажды я ответил на другой вопрос с похожими входными данными (долгота, широта, дождь), которые были «интерпретированы», а затем построены с помощью «ggplot»; см. [** здесь **] (http://stackoverflow.com/questions/19339296/plotting-contours-on-an-irregular-grid/19339663#19339663) – Henrik

+0

@Henrik Спасибо за сообщение. Я проверил это и смог получить контурный сюжет. То, что я пытаюсь сделать, - это просто добавить дополнительные значения в мой набор данных, чтобы, когда я рисую их на карте, он заполняет много дыр ... Я думал, что 'interp()' это то, что мне нужно. – Vedda

+0

'interp' только интерполяция, поэтому любые точки на сетке вне ваших входных данных будут NA. Чтобы сделать экстраполяцию, установите «extrap = TRUE». – kdauria

ответ

2

Проблема заключается в том, что akima::interp не заполняет каждую запись. Так как вы смотрите только на один «угол» ваших данных, вы видите только NA. Вам нужно «прокрутить вниз», чтобы увидеть интерполированные значения. Она заполняет только в том регионе, где есть данные:

library(akima) # should have been part of the question: 

contourplot(z ~ x+y, data=dInterp) 

enter image description here

73 -90.14268 32.61400  NA 
74 -90.01788 32.61400  NA 
75 -89.89308 32.61400  NA 
76 -89.76828 32.61400  NA 
77 -89.64347 32.61400 40.94645 
78 -89.51867 32.61400 37.13339 
79 -89.39387 32.61400 33.32033 
80 -89.26907 32.61400  NA 
81 -94.13632 32.78968  NA 
82 -94.01152 32.78968  NA 

И:

112 -90.26748 32.78968  NA 
113 -90.14268 32.78968  NA 
114 -90.01788 32.78968 51.40291 
115 -89.89308 32.78968 47.58984 
116 -89.76828 32.78968 43.77678 
117 -89.64347 32.78968 39.96372 
118 -89.51867 32.78968 36.15065 
119 -89.39387 32.78968  NA 
120 -89.26907 32.78968  NA 
121 -94.13632 32.96535  NA 

И многие другие кластеры значений в этом dataframe с 1600 строк.

+0

Спасибо! Поиграв с этим в большом файле данных, он, кажется, делает точки за пределами lat/long. Я просто пытаюсь создать дополнительные точки для данного lat/long, поэтому, когда я рисую его на карте, он заполняет отверстия. Использую ли я правильную функцию? – Vedda

Смежные вопросы