2015-05-29 55 views
2

我目前手動創建使用Hmisc包如以下大data.frame的相關矩陣:創建函數來計算數據幀的子集rcorr

mydatacorrelation001 <- rcorr(as.matrix(mydata, use = "pairwise.complete.obs")) 

我現在需要計算每個變量之間的相關性基於日曆月期間的子集(例如'2015-05'或'May-15')。

的日期目前的日常「所以我認爲,包括一個新列「月」,如下(如2015年5月29日):

mydata$Month <- factor(format(mydata$Date, "%B"),levels = month.name) 

-Kindly通過@Andy克利夫頓在另一個答案建議

(不過我需要這個被格式化爲「MAR-15」,而不是「三八」)

是否有未來的方式來自動創建的每個新rcorr矩陣變量(Eg.mydatacorrelation002,mydatacorrelation003和如此)爲每個月子集?

非常感謝您

+0

帖子'dput的結果(頭(MYDATA))'如果你的數據不敏感(這一個月改造後) – Vlo

+0

我不能得到每月改造工作。目前顯示爲;五月或六月等,但我需要5月15日或6月15日,因爲這些數據跨越多年。有關於此的任何想法?謝謝 – user3740289

回答

2

下面是用假數據,希望能告訴你如何使用您的數據進行一個例子:

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) 
}) 
+0

非常感謝,這完美地創造了月份年份專欄。唯一的問題是我有多個變量(不只是x和y)。我想輸出一個列表,我不需要明確指定列的名稱。例如。 rcorr(as.matrix(dat,use =「pairwise.complete.obs」))。 – user3740289

+0

查看更新的代碼。 – eipi10

+0

這很好,它可以根據我的需要創建相關矩陣,我可以問一個最後的問題..我通常將rcorr的輸出分配爲一個變量,例如。 'cordata'然後使用以下代碼將該矩陣轉換爲DF:'df.cordata.r = data.frame(cordata $ r)'然後使用'write.csv(df.cordata.r,'cordata.csv 「)'。這在使用該功能後似乎不起作用。我怎麼能寫這個CSV?再次感謝 – user3740289