下面是用假數據,希望能告訴你如何使用您的數據進行一個例子:
library(lubridate)
library(Hmisc)
## Create fake data
dates = seq(1.3e9, 1.3e9 + 100e6, length.out=1000)
class(dates) = "POSIXct"
set.seed(20)
dat = data.frame(dates, x=rnorm(1000), y=rnorm(1000))
# Add month-year column
dat$my = paste(month(dat$dates, label=TRUE), year(dat$dates), sep="-")
## Calculate correlations by month
corr.list = list()
corr.list = sapply(unique(dat$my), function(i) {
corr.list[i] = rcorr(dat$x[dat$my==i], dat$y[dat$my==i])
}, simplify=FALSE)
輸出是一個列表,其中每個爲期一個月的相關性year是一個單獨的列表元素。以下是輸出的第一個和最後一個元素:
$`Mar-2011`
x y
x 1.00 -0.07
y -0.07 1.00
n= 17
P
x y
x 0.7831
y 0.7831
...
$`May-2014`
x y
x 1.00 -0.64
y -0.64 1.00
n= 11
P
x y
x 0.0327
y 0.0327
UPDATE:根據您的評論,你可以只給rcorr
數據幀的整個子集,減去兩個日期欄,如下所示:
corr.list = list()
corr.list = sapply(unique(dat$my), function(i) {
dat1 = dat[dat$my==i,]
corr.list[i] = rcorr(as.matrix(dat1[, -grep("dates|my", names(dat1))]))
}, simplify=FALSE)
更新2:要回答關於輸出到csv文件的後續問題。這裏是做一個方式:
# Write correlation matrices to a csv file
lapply(names(corr.list), function(my) {
cat(my, file="corr.csv", append=TRUE)
cat("\n", file="corr.csv", append=TRUE)
write.table(corr.list[[my]][1], "corr.csv", sep=",", row.names=FALSE, append=TRUE)
cat("\n", file="corr.csv", append=TRUE)
})
帖子'dput的結果(頭(MYDATA))'如果你的數據不敏感(這一個月改造後) – Vlo
我不能得到每月改造工作。目前顯示爲;五月或六月等,但我需要5月15日或6月15日,因爲這些數據跨越多年。有關於此的任何想法?謝謝 – user3740289