如何从R中的每日文件计算月平均值?

如何从R中的每日文件计算月平均值?,r,R,我有[365个二进制文件][1]。我想计算一下月平均数。所以从365个文件中 此代码将平均每30个文件执行一次 results <- list() for (.files in files.group) { x <- do.call(rbind,(lapply(.files, readBin , double() , size = 4, n =360 * 720, signed =T))) results[[len

我有[365个二进制文件][1]。我想计算一下月平均数。所以从365个文件中

此代码将平均每30个文件执行一次

results <- list()
for (.files in files.group) {
      x <- do.call(rbind,(lapply(.files, readBin  , double() , size = 4, n =360 * 720, 
                 signed =T)))
          results[[length(results) + 1L]] <- colMeans(x)
    }
如果您对以下方面有任何想法,我将不胜感激:

dir1 <- "C:\\New folder (4)\\New folder"
files <- list.files(dir1, "*.bin",full.names=TRUE)
关于-999值,类似于x[x==-999]
关于-999值,比如x[x==-999],您在这个问题中有太多的问题。例如,其中一个问题是,对于给定的年份,如何获得每个月的天数?你可以用一些日期函数来计算,或者只是用通常的月份长度编码并测试闰年,但是你有365个文件,所以这不是闰年?。然后是没有数据值的问题,以及循环的各种其他问题,这些问题似乎已经解决了。将问题分解,在这里每个帖子问一个问题。@Wafa:请不要删除并重新发布问题。我已经在你最初问题的评论中发布了一些代码片段,这可能会让我和其他人更容易回答你的问题。现在这些都丢了。你让周围的人生活更艰难。下次,如果你有什么新的东西要添加或需要澄清,请编辑你的问题。没有得到答案是一个很好的指标。今天我本来打算讨论一下这个问题,但坦率地说,我不想重新思考我已经思考过的东西。Stephan Kolassa,我非常抱歉。事实上,我试图修改这个问题,但它被错误地删除了。我无法检索它。你可以用foo[foo=-32765]将向量foo中的特殊值更改为NA你在这个问题上有太多问题了。例如,其中一个问题是,对于给定的年份,如何获得每个月的天数?你可以用一些日期函数来计算,或者只是用通常的月份长度编码并测试闰年,但是你有365个文件,所以这不是闰年?。然后是没有数据值的问题,以及循环的各种其他问题,这些问题似乎已经解决了。将问题分解,在这里每个帖子问一个问题。@Wafa:请不要删除并重新发布问题。我已经在你最初问题的评论中发布了一些代码片段,这可能会让我和其他人更容易回答你的问题。现在这些都丢了。你让周围的人生活更艰难。下次,如果你有什么新的东西要添加或需要澄清,请编辑你的问题。没有得到答案是一个很好的指标。今天我本来打算讨论一下这个问题,但坦率地说,我不想重新思考我已经思考过的东西。Stephan Kolassa,我非常抱歉。事实上,我试图修改这个问题,但它被错误地删除了。我无法检索它。你可以用foo[foo=-32765]将向量foo中的特殊值更改为NA我修改了代码来纠正它,并实际上简化了它。我以前做过测试,但在Mac电脑上,目录的分隔符是/而不是\\,所以我在发布时修改了代码,但犯了一个错误。step3=strptimepastegsubET[0-9]+.bin,\\1,files,2012,format=%j%Y…@f3lix很好,除此之外,文件元素的格式为C:\\New folder 4\\New folder\\ET1.bin,而不仅仅是ET1.bin。但这确实是一种更简单的方式。无论如何,在这里我将代码分解成几行,以便让意思变得明显,否则整个代码显然可以用一条语句编写:splitfiles,cutstrptimepastedo.callrbind,strsplitgsub\\\.bin,files,split=ET[,2],2012,sep=-,format=%j-%Y,month@plannapus:只需将.*添加到我的regexp中,如下gsub.*ET[0-9]+.bin,\\1,文件夹。这也应该删除“ET”前面的整个路径……我修改了代码以更正它并实际简化它。我以前做过测试,但在Mac电脑上,目录的分隔符是/而不是\\,所以我在发布时修改了代码,但犯了一个错误。step3=strptimepastegsubET[0-9]+.bin,\\1,files,2012,format=%j%Y…@f3lix很好,除此之外,文件元素的格式为C:\\New folder 4\\New folder\\ET1.bin,而不仅仅是ET1.bin。但这确实是一种更简单的方式。无论如何,在这里我将代码分解成几行,以便让意思变得明显,否则整个代码显然可以用一条语句编写:splitfiles,cutstrptimepastedo.callrbind,strsplitgsub\\\.bin,files,split=ET[,2],2012,sep=-,format=%j-%Y,month@plannapus:只需将.*添加到我的regexp中,如下gsub.*ET[0-9]+.bin,\\1,文件夹。这也将删除“ET”前面的整个路径。。。
step1 <- strsplit(gsub("\\.bin","",files),split="ET")
filenumber <- do.call(rbind,step1)[,2]
step2 <- strptime(paste(filenumber,"2012",sep="-"),format="%j-%Y")
files.group <- split(files, cut(step2, "month"))
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)
    }