查找每个日期的相关性

时间:2015-08-24 14:19:05

标签: r date

所以我有这个我在R工作的数据,其中包括日期和其他一些数值。

例如:

Original data:                      Correlation:    

Date    A           B               Date      A-B correlation
1/1/14  0.646900002 0.826334113     1/1/14    0.115318653
1/1/14  0.749110046 0.76096474      2/1/14   -0.103099409
1/1/14  0.113140299 0.021753678         
1/1/14  0.606452255 0.686107567         
1/1/14  0.444319359 0.525262532         
1/1/14  0.606781624 0.044356839         
1/1/14  0.614123471 0.297375217         
1/1/14  0.188359271 0.241516935         
1/1/14  0.183521135 0.689139895         
1/1/14  0.589526858 0.254644093         
1/1/14  0.71034734  0.09013472          
1/1/14  0.837135625 0.201209164         
2/1/14  0.94648478  0.84068584          
2/1/14  0.626264662 0.081342849         
2/1/14  0.892623221 0.782297906         
2/1/14  0.450972567 0.47742116          
2/1/14  0.169566342 0.559258882         
2/1/14  0.784438364 0.679334501         
2/1/14  0.343981789 0.573520179         
2/1/14  0.319638902 0.32651945          
2/1/14  0.696791383 0.714156398         
2/1/14  0.945426519 0.279906366         
2/1/14  0.021251623 0.862969217         
2/1/14  0.730957108 0.778038087         
2/1/14  0.536041003 0.833652026         
2/1/14  0.957302868 0.447567636         
2/1/14  0.863476904 0.018996642         
2/1/14  0.372006386 0.313388118 

我使用CORREL命令在excel上做了这个。

我的第一个问题是:如何在更大的文件(包括数百万行)上复制此过程。有没有办法使R能够自动计算具有相同日期的两列之间的平均相关性?

我的第二个问题是:一旦我找到了每个日期的相关性,我该如何将其绘制为时间序列图?

我喜欢最简单的方式,因为我是初学者:)

1 个答案:

答案 0 :(得分:3)

使用dplyr,您可以执行以下操作:

 df %>% group_by(date) %>%
        summarise(Correlation = cor(apples, oranges)) %>%
        mutate(MeC = mean(Correlation))
Source: local data frame [2 x 3]

        date Correlation        MeC
1 2002-01-02 -0.09607689 0.02941009
2 2002-01-03  0.15489708 0.02941009

另一种解决方案可能是:

df %>% group_by(date) %>%
    mutate(Cor = cor(apples, oranges)) %>%
    ungroup() %>%
    mutate(MeanCor = mean(Cor))

但请注意,后者会为相关均值提供不同的结果,因为它会平均所有相关性,然后不同的长度会产生干扰。这两种措施都可能有用,这取决于您的目的。

或结合splitsapply的基础R解决方案(但也许有更好的方法):

sapply(split(df, df$date), function(x) cor(x["oranges"], x["apples"]))
 2002-01-02  2002-01-03 
-0.09607689  0.15489708