【发布时间】:2015-02-12 00:46:21
【问题描述】:
我有一个股票价格的CRSP列表如下
PERMNO date TICKER RETX
1 10138 2007-01-03 TROW 0.045236
2 10138 2007-01-04 TROW 0.008743
3 10138 2007-01-05 TROW -0.001950
4 10138 2007-01-08 TROW 0.018237
5 10138 2007-01-09 TROW 0.004051
6 10138 2007-01-10 TROW 0.005734
7 10138 2007-01-11 TROW 0.019637
8 10138 2007-01-12 TROW 0.005591
...
1 10145 2007-01-03 HON -0.003095
2 10145 2007-01-04 HON -0.000443
3 10145 2007-01-05 HON -0.009539
4 10145 2007-01-08 HON 0.006047
5 10145 2007-01-09 HON 0.007124
6 10145 2007-01-10 HON -0.006189
7 10145 2007-01-11 HON 0.016681
8 10145 2007-01-12 HON -0.003282
9 10145 2007-01-16 HON 0.001317
10 10145 2007-01-17 HON -0.001754
11 10145 2007-01-18 HON -0.010979
...
一旦我使用tidyr::spread(x,TICKER,RETX),它会返回一个矩阵,其中大部分值为 NA。
是否有任何其他功能可以重新排列矩阵,在一列中列出每个股票价格?或者如何通过几行来实现?
更新: 我发现这是导致问题的PERMNO列。在我摆脱 PERMNO 列后,出现另一个问题:
> spread(A1[,2:4],TICKER,RETX)
Error: Duplicate identifiers for rows (129717, 143815), (129718, 143816), ...
所以,我只是随机选择消息中提到的两行
PERMNO date TICKER RETX
129717 75104 2007-01-03 CBS 0.012172
> A1[143815,]
PERMNO date TICKER RETX
143815 76226 2007-01-03 CBS 0.01347
结果数据集非常脏,并且包含重复的系列。 更好的解决方案是使用 PERMNO 作为键。 这是我得到的
date 10225 10516 10909 ...
1 2007-01-03 0.005738 0.003129 -0.006593 ...
2 2007-01-04 -0.011062 -0.005615 0.028761 ...
3 2007-01-05 0.000824 -0.001568 -0.022366 ...
4 2007-01-08 -0.005059 0.005027 -0.003520 ...
5 2007-01-09 0.002956 -0.024383 0.000883 ...
6 2007-01-10 -0.003301 -0.008651 -0.010587 ...
...
这很令人沮丧,但我终于得到了一些东西。无论如何用匹配的 TICKER 替换数字列名。这是一个演示
PERMNO date FO HON ...
1 10225 2007-01-03 0.005738 -0.003095 ...
2 10225 2007-01-04 -0.011062 -0.000443 ...
3 10225 2007-01-05 0.000824 -0.009539 ...
4 10225 2007-01-08 -0.005059 0.006047 ...
5 10225 2007-01-09 0.002956 0.007124 ...
6 10225 2007-01-10 -0.003301 -0.006189 ...
7 10225 2007-01-11 0.007925 0.016681 ...
8 10225 2007-01-12 -0.010914 -0.003282 ...
【问题讨论】:
-
我假设您的意思是
tidyr::spread(我相应地编辑了您的问题)。您的示例很差,因为它只显示了一个值RETX,所以没有说明您的问题——您的代码在这 8 行上运行得很好,没有返回NAs。 (它返回一个数据框,而不是矩阵。)tidyr不是内置的,但您可以查看reshape2::dcast以获得更灵活的spread版本。 -
但是,如果您收到
NAs,我假设您的股票有不同的permno值或不同的日期——可能是永久的。因此,如果该列不适用于您的传播数据,请在传播之前将其删除。 -
感谢您的建议。这是我第一次在这个网站上发布问题,我还在努力。
-
没问题!只需使用一些显示问题的数据来编辑您的问题。你可以看到更多reproducibility tips here。但是请务必将新数据编辑到您的问题中,否则我们无法看到问题或测试解决方案。尝试找到 8 或 10 行,有两个 TICKER 值,每个 4 或 5 个日期,以显示问题。或许可以解释一下PERMNO是什么。
-
那是你的问题。如果您需要更多帮助,请将代码编辑到您的问题中,而不是将大量代码放入 cmets。如果这样可以解决您的问题,您可能只想删除问题。
标签: r multiple-columns spread