Пожалуйста, предоставьте простой воспроизводимый пример, когда вы задаете вопрос.И попробуйте разбить ваш вопрос на части.У вас есть два вопроса (1), как хранить данные, которые вы извлекаете построчно, и (2), как добавить в файл.Я отвечу # 1, поскольку вам может не понадобиться № 2.
library(raster)
files <- rep(system.file("external/rlogo.grd", package="raster"), 3)
xy <- matrix(c(48, 48, 48, 53, 50, 46, 54, 70, 84, 85, 74, 84, 95, 85,
66, 42, 26, 4, 19, 17, 7, 14, 26, 29, 39, 45, 51, 56, 46, 38, 31,
22, 34, 60, 70, 73, 63, 46, 43, 28), ncol=2)
stations <- letters[1:nrow(xy)]
outf <- "precip.csv"
d <- data.frame(t(xy))
colnames(d) <- stations
d <- cbind(file="", var=c("x", "y"), d)
for(i in 1:length(files)){
nc <- brick(files[i])
e <- t(extract(nc, xy))
colnames(e) <- stations
v <- data.frame(file=basename(files[i]), var=names(nc), e)
d <- rbind(d, v)
}
rownames(d) <- NULL
head(d)
Теперь запишите результаты в CSV за один шаг
write.csv(d, outf)
Если вы должны напишите чанк csv по чанку, возможно, сделайте что-то вроде:
d <- data.frame(t(xy))
colnames(d) <- stations
d <- cbind(file="", var=c("x", "y"), d)
outf <- "precip.csv"
if (file.exists(outf)) file.remove(outf)
write.csv(d, outf, row.names=FALSE)
for(i in 1:length(files)){
nc <- brick(files[i])
e <- t(extract(nc, xy))
colnames(e) <- stations
v <- data.frame(file=basename(files[i]), var=names(nc), e)
write.table(v, outf, append=TRUE, row.names=FALSE, col.names=FALSE, sep=",")
}
И проверьте:
read.csv(outf)
Ваш код, немного очищенный, может выглядеть так:
библиотека (ncdf4) библиотека (растр)
files <- list.files(pattern="*.nc")
library(raster)
s <- read.csv("Remaining_Points.csv", stringsAsFactors = FALSE)
xy <- s[, c("lon", "lat")]
stations <- s$stationname
for(i in 1:length(files)){
nc <- brick(files[i])
e <- t(round(extract(nc, xy), 1))
# etc
}
Теперь я думаю, что вам действительно следует подумать о добавлении значений в виде столбцов, поскольку это намного проще.(а затем, возможно, при необходимости измените форму)