我有不同位置(X1,X2,...)的温度数据的每日平均值,我想用它们插值地图。我通过从格式化的 excel 表中加载它们来创建一个长格式数据对象,例如:
library(reshape2)
tempdata <- read.csv("...", sep=";")
names(tempdata) <- c("date", paste("X", 1:73))
head(tempdata)
# date X1 X2 X3 X4 X5 X6 X7
# 1 1 7.3 6.6 6.7 5.8 6.1 6.1 5.5
# 2 2 7.5 6.6 6.6 5.6 4.8 4.7 3.9
# 3 3 8.8 7.7 7.6 7.0 7.0 6.0 5.8
# 4 4 8.5 7.4 7.5 7.0 7.3 5.9 5.5
# 5 5 7.7 6.7 6.9 6.1 6.8 5.1 4.1
# 6 6 7.5 6.7 6.8 6.0 6.4 5.0 4.1
X1,X2,...位置的纬度经度相同:
lat.lon <- read.csv("...", sep=";")
rownames(lat.lon) <- c(paste0("X",1:73))
head(lat.lon)
# latitude longitude
# X1 54.1650 6.3458
# X2 54.1667 7.4500
# X3 54.1832 7.8856
# X4 55.0114 8.4158
# X5 54.5068 9.5393
# X6 54.5214 11.0522
我将它们合并为长格式:
res <- merge(
melt(tempdata, id.vars="date"),
lat.lon,
by.x="variable", by.y="row.names"
)
head(res)
# variable date value latitude longitude
# X1 1 9.9 54.165 6.3458
# X1 2 8.9 54.165 6.3458
# X1 3 7.8 54.165 6.3458
# X1 4 9.2 54.165 6.3458
# X1 5 8.7 54.165 6.3458
# X1 6 8.4 54.165 6.3458
和
coordinates(res) = ~longitude+latitude
我可以使用 spplot 将它们绘制在正确的位置,包括国家边界:
library(maptools)
load(url('http://gadm.org/data/rda/DEU_adm0.RData'))
GE <- gadm
GE <- spChFIDs(GE, paste("GE", rownames(GE), sep = "_"))
spplot(res["value"], sp.layout = list("sp.polygons", GE), col.regions=bpy.colors(20))
我想在一天的观察中使用 IDW,但是我发现的包(例如 gstat)中的 idw 方法需要其他“网格化”数据对象。我如何创建这样的数据对象以便用这样的方法对它们进行插值?