我是R的新手并且有一个小问题。我有很多带时间戳的数据(数据框称为'EURO')多年来我计算了收益和'时间'变量(样本在下面);
Time Returns
9 5
10 5
11 8
12 7
13 7
14 2
15 -4
16 6
17 8
9 5
10 7
11 4
12 6
13 1
14 0
15 -4
16 7
17 -4
9 8
10 1
11 1
12 6
13 8
14 8
15 4
16 -6
17 7
我使用以下代码计算每个时间戳的平均回报率;
Timeaverages <- aggregate(Returns~Time,EURO,mean)
由此我得到每个时间戳的平均回报。但是现在我想表示我的数据中心,即减去每个时间戳的平均回报。例如,如果时间9的平均回报是6,那么meancentred返回将是5-6 = -1。对于时间10,平均回报为5,因此meancentred回报将为2等。
Time Returns Meancentered
9 5 -1
10 7 2
11 7 3
12 6 0
13 6 1
14 4 0
15 -3 -2
16 5 3
17 9 5
9 5 -1
10 7 2
11 4 0
12 6 0
13 1 -4
14 0 -4
15 -4 -3
16 7 5
17 -4 -8
9 8 2
10 1 -4
11 1 -3
12 6 0
13 8 3
14 8 4
15 4 5
16 -6 -8
17 7 3
任何帮助非常感谢
答案 0 :(得分:0)
如果我已正确理解您正在寻找merge()
。
merge.df <- merge(EURO, Timeaverages, by="Time", suffixes = c(".ind", ".mean"))
# Time Returns.ind Returns.mean
#1 9 5 6.000000
#2 9 5 6.000000
#3 9 8 6.000000
#4 10 1 4.333333
#5 10 5 4.333333
# etc
现在只需将两个返回列和cbind
之间的差异与merge.df
区分开来。
diff <- merge.df$Returns.ind - merge.df$Returns.mean
cbind(merge.df, diff)
# Time Returns.ind Returns.mean diff
#1 9 5 6.000000 -1.0000000
#2 9 5 6.000000 -1.0000000
#3 9 8 6.000000 2.0000000
#4 10 1 4.333333 -3.3333333
#5 10 5 4.333333 0.6666667
#6 10 7 4.333333 2.6666667
#7 11 1 4.333333 -3.3333333
附录
如果您使用dplyr
,您可以通过分组,变异,取消分组和再次变异来在一个链中完成所有操作。
library(dplyr)
EURO %>% group_by(Time) %>% mutate(Returns.ind = mean(Returns)) %>%
ungroup() %>% mutate(diff = Returns - Returns.ind)
不需要中间对象。