![](/img/trans.png)
[英]How to calculate the historical monthly volatility from daily returns in 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.