dir1 <- "C:\\New folder (4)\\New folder"
files <- list.files(dir1, "*.bin",full.names=TRUE)
首先,您必须提取文件的编号(因为它们没有按照您希望的方式排序(即“ET10.bin”在“ET1.bin”之后而不是“ET9.bin”之后)。
step1 <- strsplit(gsub("\\.bin","",files),split="ET")
filenumber <- do.call(rbind,step1)[,2]
那么这个数字就是数字形式的一年中的日子(由strptime
as识别%j
)。假设有问题的年份是 2012 年:
step2 <- strptime(paste(filenumber,"2012",sep="-"),format="%j-%Y")
files.group <- split(files, cut(step2, "month"))
关于 -999 值x[x == -999] <- NA
,只要您记得在计算平均值时排除 NA 值(即colMeans(x, na.rm=TRUE)
) ,就可以解决问题
编辑:根据@f3lix 的建议,您可以通过filenumber
更直接的方式获得:
dir1 <- "C:\\New folder (4)\\New folder"
files <- list.files(dir1, "*.bin",full.names=TRUE)
filenumber <- gsub(".*ET([0-9]+).bin", "\\1", files)
files.group <- split(files, cut(strptime(paste(filenumber,"2012",sep="-"),format="%j-%Y"), "month"))
然后你的循环:
results <- list()
for (i in 1:12) {
x <- do.call(rbind,(lapply(files.group[[i]], readBin ,
double() , size = 4, n =360 * 720, signed =T)))
x[x == -999] <- NA
results[[i]] <- colMeans(x, na.rm=TRUE)
}
for (i in seq_along(results)) {
fileName <- sprintf("C:\\Users\\New folder\\glo_%d.flt", i)
writeBin(as.double(results[[i]]), fileName, size = 4)
}