Функция Reshape2 dcast() возвращает неверные значения

У меня есть тиковые данные по акциям в промышленном индексе Доу-Джонса в течение дня. Вот пример данных:

> head(df)
                        TS  Sym      Ask
1: 2015-03-24 14:00:00.000 YMM5 17956.00
2: 2015-03-24 14:00:00.002 AAPL   126.91
3: 2015-03-24 14:00:00.005  UNH   118.35
4: 2015-03-24 14:00:00.009  XOM    84.64
5: 2015-03-24 14:00:00.014  AXP    81.35
6: 2015-03-24 14:00:00.016   PG    84.19

Я пытаюсь использовать функцию dcast() reshape2 для преобразования данных в широкий формат, поэтому это будет выглядеть так:

                        TS   AAPL   AXP    PG    UNH   XOM
1: 2015-03-24 14:00:00.000 126.91 81.35 84.19 118.35 84.64

Однако, когда я пробую следующий набор команд, вот что я получаю:

tick <- data.table(read.csv("2015-3-24.csv"))
df<- data.table(TS = tick$DateTime, Sym = tick$Symbol, Ask = tick$Ask, Bid = tick$Bid)
tmp <- dcast(data = df, formula = TS ~ Sym)

head(tmp)


                       TS AAPL AXP BA CAT CSCO CVX DD DIS GE GS HD IBM INTC JNJ JPM KO MCD MMM MRK MSFT NKE PFE PG TRV UNH UTX V VZ WMT XOM YMM5
1 2015-03-24 14:00:00.000    0   0  0   0    0   0  0   0  0  0  0   0    0   0   0  0   0   0   0    0   0   0  0   0   0   0 0  0   0   0    1
2 2015-03-24 14:00:00.002    1   0  0   0    0   0  0   0  0  0  0   0    0   0   0  0   0   0   0    0   0   0  0   0   0   0 0  0   0   0    0
3 2015-03-24 14:00:00.005    0   0  0   0    0   0  0   0  0  0  0   0    0   0   0  0   0   0   0    0   0   0  0   0   1   0 0  0   0   0    0

Я знаю, что неправильно понимаю формулу или что-то в этом роде, но независимо от того, что я пытаюсь сделать, я получаю тот же результат. Заранее спасибо.


person CJ B    schedule 25.06.2015    source источник
comment
Есть ли другие сообщения, возвращенные dcast?   -  person Arun    schedule 25.06.2015
comment
Да, "Aggregate function missing, defaulting to 'length'' Спасибо.   -  person CJ B    schedule 25.06.2015


Ответы (1)


Несколько проблем с вашим постом, я хотел бы получить разъяснения: (слишком длинный для комментариев, так что это в лучшем случае предположение на данный момент.)

  • Нет воспроизводимого примера.
  • Вы используете data.table, но версия не отображается. data.table обеспечивает эффективные реализации melt и dcast. В версиях ‹= 1.9.4 вы можете использовать dcast.data.table. Начиная с версии 1.9.5+, вы можете напрямую использовать dcast(), не загружая reshape2. Поэтому я не уверен, используете ли вы dcast из reshape2 или из версии devel data.table.
  • Ваша формула (если не опечатка) неверна для результата, который вы показали.

Я полагаю, вы не показали всего результата от dcast. Если он на что-то жалуется

Агрегатная функция отсутствует, по умолчанию используется «длина»

тогда ваш идентификатор и переменные измерения в формуле не однозначно идентифицируют ячейки. Имея минимальную предоставленную информацию, я могу только предположить, что это действительно ваша проблема.

person Arun    schedule 25.06.2015
comment
Я отредактировал сообщение, чтобы исправить опечатку, которую я сделал ранее, чтобы результат отражал фактический ввод TS ~ Sym. У меня отсутствует функция Aggregate, по умолчанию используется сообщение «длина». Я попробовал dcast() без перезагрузки reshape2 и получил тот же результат. Спасибо. - person CJ B; 25.06.2015