# 已知 x 和 g.date 是相互對應的二個向量
x <- 1:365
g.date <- seq(as.Date("2018-01-01"), as.Date("2018-12-31"), by = "day")
# 先對 x 和 g.date 重新排序(仍保留對應關係),後面會比較方便,也比較保險
x <- x[order(g.date)]
g.date <- g.date[order(g.date)]
# 取得月份
g.
month <- strftime(g.
date, format
= "%Y-%m")
# 用 for loop 得到和 tapply(x, g.month, mean) 一樣的結果
# 辦法是一個一個 x 元素加總到 res.sum 裡
res.sum <- vector("numeric", length(table(g.month)))
names(res.sum) <- names(table(g.month))
res.N <- table(g.month)
for (i in 1:length(x)) {
var.month <- g.month[i]
var.month.th <- which(var.month == names(res.sum))
res.sum[var.month.th] <- x[i] + res.sum[var.month.th]
}
res.sum / res.N # 為所求
# > res.sum / res.N # 為所求
# g.month
# 2018-01 2018-02 2018-03 2018-04 2018-05 2018-06 2018-07 2018-08 2018-09 2018-10 2018-11 2018-12
# 16.0 45.5 75.0 105.5 136.0 166.5 197.0 228.0 258.5 289.0 319.5 350.0
# > tapply(x, g.month, mean)
# 2018-01 2018-02 2018-03 2018-04 2018-05 2018-06 2018-07 2018-08 2018-09 2018-10 2018-11 2018-12
# 16.0 45.5 75.0 105.5 136.0 166.5 197.0 228.0 258.5 289.0 319.5 350.0
IyDlt7Lnn6UgeCDlkowgZy5kYXRlIOaYr+ebuOS6kuWwjeaHieeahOS6jOWAi+WQkemHjwp4IDwtIDE6MzY1CmcuZGF0ZSA8LSBzZXEoYXMuRGF0ZSgiMjAxOC0wMS0wMSIpLCBhcy5EYXRlKCIyMDE4LTEyLTMxIiksIGJ5ID0gImRheSIpCgojIOWFiOWwjSB4IOWSjCBnLmRhdGUg6YeN5paw5o6S5bqP77yI5LuN5L+d55WZ5bCN5oeJ6Zec5L+C77yJ77yM5b6M6Z2i5pyD5q+U6LyD5pa55L6/77yM5Lmf5q+U6LyD5L+d6ZqqCnggPC0geFtvcmRlcihnLmRhdGUpXQpnLmRhdGUgPC0gZy5kYXRlW29yZGVyKGcuZGF0ZSldCgojIOWPluW+l+aciOS7vQpnLm1vbnRoIDwtIHN0cmZ0aW1lKGcuZGF0ZSwgZm9ybWF0ID0gIiVZLSVtIikKCiMg55SoIGZvciBsb29wIOW+l+WIsOWSjCB0YXBwbHkoeCwgZy5tb250aCwgbWVhbikg5LiA5qij55qE57WQ5p6cCgojIOi+puazleaYr+S4gOWAi+S4gOWAiyB4IOWFg+e0oOWKoOe4veWIsCByZXMuc3VtIOijoQpyZXMuc3VtIDwtIHZlY3RvcigibnVtZXJpYyIsIGxlbmd0aCh0YWJsZShnLm1vbnRoKSkpCm5hbWVzKHJlcy5zdW0pIDwtIG5hbWVzKHRhYmxlKGcubW9udGgpKQpyZXMuTiA8LSB0YWJsZShnLm1vbnRoKQpmb3IgKGkgaW4gMTpsZW5ndGgoeCkpIHsKICB2YXIubW9udGggPC0gZy5tb250aFtpXQogIHZhci5tb250aC50aCA8LSB3aGljaCh2YXIubW9udGggPT0gbmFtZXMocmVzLnN1bSkpCiAgcmVzLnN1bVt2YXIubW9udGgudGhdIDwtIHhbaV0gKyByZXMuc3VtW3Zhci5tb250aC50aF0KfQoKcmVzLnN1bSAvIHJlcy5OICMg54K65omA5rGCCgojID4gcmVzLnN1bSAvIHJlcy5OICMg54K65omA5rGCCiMgZy5tb250aAojIDIwMTgtMDEgMjAxOC0wMiAyMDE4LTAzIDIwMTgtMDQgMjAxOC0wNSAyMDE4LTA2IDIwMTgtMDcgMjAxOC0wOCAyMDE4LTA5IDIwMTgtMTAgMjAxOC0xMSAyMDE4LTEyIAojICAgIDE2LjAgICAgNDUuNSAgICA3NS4wICAgMTA1LjUgICAxMzYuMCAgIDE2Ni41ICAgMTk3LjAgICAyMjguMCAgIDI1OC41ICAgMjg5LjAgICAzMTkuNSAgIDM1MC4wIAoKIyA+IHRhcHBseSh4LCBnLm1vbnRoLCBtZWFuKQojIDIwMTgtMDEgMjAxOC0wMiAyMDE4LTAzIDIwMTgtMDQgMjAxOC0wNSAyMDE4LTA2IDIwMTgtMDcgMjAxOC0wOCAyMDE4LTA5IDIwMTgtMTAgMjAxOC0xMSAyMDE4LTEyIAojICAgIDE2LjAgICAgNDUuNSAgICA3NS4wICAgMTA1LjUgICAxMzYuMCAgIDE2Ni41ICAgMTk3LjAgICAyMjguMCAgIDI1OC41ICAgMjg5LjAgICAzMTkuNSAgIDM1MC4wIAo=