簡體   English   中英

如何從R中的每日文件計算月平均值?

[英]How to calculate monthly average from daily files in 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[[length(results) + 1L]] <- colMeans(x)
    }

對於以下任何想法,我將不勝感激:

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識別為%j )。 假設有問題的年份是2012年:

step2 <- strptime(paste(filenumber,"2012",sep="-"),format="%j-%Y")
files.group <- split(files, cut(step2, "month"))

關於-999值,例如x[x == -999] <- NA colMeans(x, na.rm=TRUE)應該可以解決問題,只要您記得在計算平均值時排除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)
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM