Упорядочена ли таблица данных по строкам и столбцам, и вы уже знаете геометрию вашей сетки? Если это так, то вы, вероятно, можете ускорить процесс, создав матрицу правильного размера и формы, а затем создав растр из этой матрицы и присвоив ей геометрию.
Крошечный пример:
> d = data.frame(expand.grid(1:3,1:4),1:12)
> d
Var1 Var2 X1.12
1 1 1 1
2 2 1 2
3 3 1 3
4 1 2 4
5 2 2 5
6 3 2 6
7 1 3 7
8 2 3 8
9 3 3 9
10 1 4 10
11 2 4 11
12 3 4 12
Использование rasterFromXYZ
дает мне следующее:
> r1 = rasterFromXYZ(d)
> r1
class : RasterLayer
dimensions : 4, 3, 12 (nrow, ncol, ncell)
resolution : 1, 1 (x, y)
extent : 0.5, 3.5, 0.5, 4.5 (xmin, xmax, ymin, ymax)
crs : NA
source : memory
names : X1.12
values : 1, 12 (min, max)
Теперь некоторые функции этой функции - это go через координаты X и Y для определения геометрии сетки. Но если вы уже знаете экстент и размер, то вы также можете создать один и тот же растр за несколько шагов.
Сначала сделайте матрицу правильной стороной - для моего заказа в d
Мне нужно заполнить матрицу по строкам и переверните строки, чтобы получить правильный порядок. Если ваша таблица XYZ упорядочена по-другому, то вам может потребоваться выполнить некоторые другие манипуляции, или это может быть правильным. Обратите внимание, здесь я должен знать заранее, сколько там строк и столбцов:
r2 = raster(matrix(d[,3],ncol=3,nrow=4,byrow=TRUE)[4:1,])
, затем установить экстент. Здесь я должен заранее знать экстенты, в данном случае на половину ячейки шире, чем минимальное и максимальное значения, а размер моей ячейки составляет одну единицу:
extent(r2) = c(xmin=0.5, xmax=3.5, ymin=0.5, ymax=4.5)
Все, что вы делаете, займет некоторое время на 100 000 000 растровых ячеек, так что тестируйте на небольших примерах форматы, аналогичные вашим реальным данным, чтобы увидеть, является ли это победой.