【发布时间】:2018-03-03 18:57:48
【问题描述】:
我有一个数据框,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 命令,但到目前为止我无法让它们中的任何一个工作。我也尝试搜索类似的问题,但找不到适合我确切问题的解决方案。有没有一种简单的方法来做这样的事情。
非常感谢您的每一次帮助!
【问题讨论】:
-
看看
split和cut -
为什么要做几个
data.frames?为了发送到其他地方,或者对每个data.frame应用一个函数?您可能需要为每个(组)您想要组合在一起的月份创建一个简单的组 ID,然后使用dplyr::group_by()和/或split(),正如已经建议的那样到达您需要的位置。 -
我不完全确定我必须制作几个数据框,但由于我对 R 的了解有限,这对我来说似乎是最简单的解决方案。我说我只需要在前三个月、接下来的三个月等执行此操作,但这只是一个示例。我也需要在六个月、九个月和十二个月内做同样的事情。我将从尝试简单的组 ID 开始,看看我在哪里。谢谢
-
如果您仍想拆分多个数据框,请尝试查看this。重复?
-
@Sotos 和@Jim Leach 我试过
df <- as.data.frame(split.Date(Returns, 1987-02-27, drop = TRUE)),但新的df 与旧的(返回)完全相同,只是标题有奇怪的名称。正如您可能已经猜到的那样,我对 R 很陌生,所以我可能会离开这里