这是一个带有假数据的示例,希望能向您展示如何处理您的数据:
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)
输出是一个列表,其中每个月-年的相关性是一个单独的列表元素。以下是输出的第一个和最后一个元素:
$`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
更新:根据您的评论,您可以只提供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)
})