所以我有这个我在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能够自动计算具有相同日期的两列之间的平均相关性?
我的第二个问题是:一旦我找到了每个日期的相关性,我该如何将其绘制为时间序列图?
我喜欢最简单的方式,因为我是初学者:)
答案 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))
但请注意,后者会为相关均值提供不同的结果,因为它会平均所有相关性,然后不同的长度会产生干扰。这两种措施都可能有用,这取决于您的目的。
或结合split
和sapply
的基础R解决方案(但也许有更好的方法):
sapply(split(df, df$date), function(x) cor(x["oranges"], x["apples"]))
2002-01-02 2002-01-03
-0.09607689 0.15489708