У меня есть список CRSP котировок акций, как следоватьраспространения() в tidyr
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 строках без возврата NA. (И он возвращает фрейм данных, а не матрицу.) 'Tidyr' не встроен, но вы можете увидеть' reshape2 :: dcast' для более гибкой версии 'spread'. – Gregor
Однако, если вы получаете 'NA', я предполагаю, что у вас есть разные значения 'permno' или разные даты для ваших акций - вероятно, пермо. Поэтому, если этот столбец не применим к вашим данным распространения, просто снимите его перед распространением. – Gregor
Спасибо за совет. Я впервые задал вопрос на этом сайте, я все еще работаю над этим. – HLD25