我有一个数据框,Returns
看起来像这样:
Date Company LstPrice r
1987-02-27 NOVO NORDISK 'B' 2.29 0.031531532
1987-03-31 NOVO NORDISK 'B' 2.33 0.017467249
1987-04-30 NOVO NORDISK 'B' 2.25 -0.034334764
1987-05-29 NOVO NORDISK 'B' 2.22 -0.013333333
1987-06-30 NOVO NORDISK 'B' 2.47 0.1126126137
1987-07-31 NOVO NORDISK 'B' 2.46 -0.004048583
1987-08-31 NOVO NORDISK 'B' 1.98 -0.195121951
1987-09-30 NOVO NORDISK 'B' 1.90 -0.040404040
1987-02-27 DANSKE BANK 24.29 -0.130637079
1987-03-31 DANSKE BANK 24.97 0.027995060
1987-04-30 DANSKE BANK 25.43 0.018422107
1987-05-29 DANSKE BANK 26.19 0.029885961
1987-06-30 DANSKE BANK 26.50 0.011836579
1987-07-31 DANSKE BANK 26.57 0.002641509
1987-08-31 DANSKE BANK 28.55 0.074520135
1987-09-30 DANSKE BANK 26.25 -0.080560420
我想为不同月份创建新的数据框架。例如,我想要一个新的数据框,其中包含前三个月的观察结果,未来三个月的新数据框,等等。它们看起来像这样:
数据框,FirstThreeMonths
:
Date Company LstPrice r
1987-02-27 NOVO NORDISK 'B' 2.29 0.031531532
1987-03-31 NOVO NORDISK 'B' 2.33 0.017467249
1987-04-30 NOVO NORDISK 'B' 2.25 -0.034334764
1987-02-27 DANSKE BANK 24.29 -0.130637079
1987-03-31 DANSKE BANK 24.97 0.027995060
1987-04-30 DANSKE BANK 25.43 0.018422107
数据框,NextThreeMonths
:
Date Company LstPrice r
1987-05-29 NOVO NORDISK 'B' 2.22 -0.013333333
1987-06-30 NOVO NORDISK 'B' 2.47 0.1126126137
1987-07-31 NOVO NORDISK 'B' 2.46 -0.004048583
1987-05-29 DANSKE BANK 26.19 0.029885961
1987-06-30 DANSKE BANK 26.50 0.011836579
1987-07-31 DANSKE BANK 26.57 0.002641509
....等等(过去30年我有大约2200家公司的数据,因此我将不得不创建大量数据框。)
我尝试了几种不同的方式,包括使用if
和for
循环,以及subset
命令,但到目前为止,我无法使其中任何一种工作。我也尝试过搜索类似的问题,但无法找到适合我确切问题的解决方案。有没有一种简单的方法可以做这样的事情。
非常感谢所有帮助的努力!
答案 0 :(得分:1)
您需要先制作分割矢量。例如:
splitter <- cut(as.integer(format(df$Date,'%m')),
breaks = c(0,3,6,9,12),
labels = c('First three','Second three','Third three','Fourth three'))
dflist <- split(df, splitter)
结果:
> dflist
$`First three`
Date Company LstPrice r
1 1987-02-27 NOVO NORDISK B 2.29 0.03153153
2 1987-03-31 NOVO NORDISK B 2.33 0.01746725
9 1987-02-27 DANSKE BANK 24.29 -0.13063708
10 1987-03-31 DANSKE BANK 24.97 0.02799506
$`Second three`
Date Company LstPrice r
3 1987-04-30 NOVO NORDISK B 2.25 -0.03433476
4 1987-05-29 NOVO NORDISK B 2.22 -0.01333333
5 1987-06-30 NOVO NORDISK B 2.47 0.11261261
11 1987-04-30 DANSKE BANK 25.43 0.01842211
12 1987-05-29 DANSKE BANK 26.19 0.02988596
13 1987-06-30 DANSKE BANK 26.50 0.01183658
$`Third three`
Date Company LstPrice r
6 1987-07-31 NOVO NORDISK B 2.46 -0.004048583
7 1987-08-31 NOVO NORDISK B 1.98 -0.195121951
8 1987-09-30 NOVO NORDISK B 1.90 -0.040404040
14 1987-07-31 DANSKE BANK 26.57 0.002641509
15 1987-08-31 DANSKE BANK 28.55 0.074520135
16 1987-09-30 DANSKE BANK 26.25 -0.080560420
$`Fourth three`
[1] Date Company LstPrice r
<0 rows> (or 0-length row.names)
从该列表中删除空数据帧可以这样做:
dflist <- split(df, splitter)
dflist <- dflist[sapply(dflist, nrow) > 0]