Создание поверхности из предварительно нанесенных точек

У меня есть большой data.frame, который имеет 3 переменные Longitude, Latitudeи Temp.

Данные упорядочиваются так, чтобы они регулярно располагались на «сетке» в 1/4 градуса, так что dput(head(dat)) дает:

structure(list(Longitude = c(0.125, 0.375, 0.625, 0.875, 1.125, 
1.375), Latitude = c(0.125, 0.125, 0.125, 0.125, 0.125, 0.125
), Temp = c(25.2163, 25.1917, 25.1593, 25.125, 25.0908, 25.0612
)), .Names = c("Longitude", "Latitude", "Temp"), row.names = c(NA, 
6L), class = "data.frame").

У меня проблемы с преобразованием в нужный формат.

Я хочу создать обычный объект поверхности (обычно это список), где x и y — значения сетки, а z — соответствующая матрица поверхности. Это обычный формат, используемый persp, contour, imageи т. д.

Используя этот поверхностный объект, я смогу легко интерполировать в матрицу местоположений, используя interp.surfиз пакета fields.

Любые предложения были бы замечательными.


person danny_C_O_T_W    schedule 12.08.2016    source источник
comment
stackoverflow.com/questions/38658033/   -  person AkselA    schedule 12.08.2016


Ответы (1)


Предположим, ваши данные похожи на

set.seed(123)
d <- data.frame(lon=rep(seq(0,1,0.25), times=5),
           lat=rep(seq(0,1,0.25), each=5),
           temp=sample(1:25, 25, replace=TRUE))
head(d, 8)
#    lon  lat temp
# 1 0.00 0.00    8
# 2 0.25 0.00   20
# 3 0.50 0.00   11
# 4 0.75 0.00   23
# 5 1.00 0.00   24
# 6 0.00 0.25    2
# 7 0.25 0.25   14
# 8 0.50 0.25   23

Мы создаем матрицу z, которая представляет значения для каждой точки сетки. Затем мы помещаем местоположения линий сетки (x и y) в список вместе с z.

library(reshape2)
z <- acast(d, lat~lon, value.var="temp")
X <- list(x=sort(unique(d$lon)), 
          y=sort(unique(d$lat)), 
          z=z)

image(X, col=gray.colors(25))
with(d, text(lon, lat, labels=temp))

введите здесь описание изображения

Также см. раздел Изменить векторы широты и долготы на матрицу в R.

person Weihuang Wong    schedule 12.08.2016