Создание фондового индекса и т. Д. Из большого фрейма данных в R

#r #dataframe #plyr #stock

#r #фрейм данных #plyr #фондовый

Вопрос:

У меня есть фрейм данных stockdata namned, который включает цены закрытия нескольких акций за несколько лет. Стиль фрейма данных представлен ниже:

       date close  ticker  stock.name
2001-09-06  3.06  LAGR   Lagercrantz
2001-09-07  2.89  LAGR   Lagercrantz
2001-09-09  2.67  LAGR   Lagercrantz
2001-09-10  2.67  LAGR   Lagercrantz
2001-09-11  2.56  LAGR   Lagercrantz
2001-09-12  2.24  LAGR   Lagercrantz
2001-09-13  2.44  LAGR   Lagercrantz
2001-09-06 20.70  MEAB   Malmbergs Elektriska
2001-09-07 20.60  MEAB   Malmbergs Elektriska
2001-09-09 20.40  MEAB   Malmbergs Elektriska
2001-09-10 20.50  MEAB   Malmbergs Elektriska
2001-09-11 20.50  MEAB   Malmbergs Elektriska
2001-09-12 20.70  MEAB   Malmbergs Elektriska
2001-09-13 20.60  MEAB   Malmbergs Elektriska
2011-07-06 1.8018 HTRO   Hexatronic
2011-07-07 1.8018 HTRO   Hexatronic
2011-07-08 1.8318 HTRO   Hexatronic
2011-07-11 1.8394 HTRO   Hexatronic
2011-07-12 1.8394 HTRO   Hexatronic
2011-07-13 1.8769 HTRO   Hexatronic
 

Исходя из этого, я хотел бы:

  1. Добавьте столбец namned percentage , который должен содержать показатели акций в процентах на основе даты первого листинга каждой акции.
  2. Создайте фондовый индекс на основе цены закрытия всех акций в фрейме данных. Поскольку количество акций зависит от времени (разные даты введения, исключения из списков и т. Д.), Это необходимо учитывать при расчете процента и цены для нового фондового индекса.

Какой был бы самый простой способ выполнить эти действия? Есть ли какой-нибудь способ без необходимости перебирать все данные?

Ответ №1:

Данные

 df <- read.table(text = "
date close  ticker  stock.name
2001-09-06  3.06  LAGR   Lagercrantz
2001-09-07  2.89  LAGR   Lagercrantz
2001-09-09  2.67  LAGR   Lagercrantz
2001-09-10  2.67  LAGR   Lagercrantz
2001-09-11  2.56  LAGR   Lagercrantz
2001-09-12  2.24  LAGR   Lagercrantz
2001-09-13  2.44  LAGR   Lagercrantz
2001-09-06 20.70  MEAB   'Malmbergs Elektriska'
2001-09-07 20.60  MEAB   'Malmbergs Elektriska'
2001-09-09 20.40  MEAB   'Malmbergs Elektriska'
2001-09-10 20.50  MEAB   'Malmbergs Elektriska'
2001-09-11 20.50  MEAB   'Malmbergs Elektriska'
2001-09-12 20.70  MEAB   'Malmbergs Elektriska'
2001-09-13 20.60  MEAB   'Malmbergs Elektriska'
2011-07-06 1.8018 HTRO   Hexatronic
2011-07-07 1.8018 HTRO   Hexatronic
2011-07-08 1.8318 HTRO   Hexatronic
2011-07-11 1.8394 HTRO   Hexatronic
2011-07-12 1.8394 HTRO   Hexatronic
2011-07-13 1.8769 HTRO   Hexatronic
  ",
  header = TRUE)
 

1. и 2.

 library(tidyverse)

df %>%
  group_by(ticker) %>%
  mutate(
    percentage = close / close[date == min(date)],
    average = mean(percentage))
 

Комментарии:

1. Спасибо, Тони! Что касается вопроса 2, я думаю, мне просто нужно среднее значение нового столбца акций «процент»

2. И вы хотите, чтобы средние значения percentage столбца по-прежнему группировались по тикеру, верно? Я отредактировал код, чтобы отразить это.

3. Я протестировал код @tonybot, и процент работает хорошо. Однако среднее значение просто создает прямую горизонтальную линию, если бы я должен был отображать данные (когда данные о запасах на самом деле сильно колеблются). Я думаю, мне нужно создать новый вектор для среднего значения и убедиться, что для каждой даты доступно только одно значение. Есть ли какой-нибудь простой способ сделать это?

4. Я решил среднюю проблему @tonybot, создав новый tibble и используя функцию summarise. Спасибо за всю помощь! 🙂