#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
Исходя из этого, я хотел бы:
- Добавьте столбец namned
percentage
, который должен содержать показатели акций в процентах на основе даты первого листинга каждой акции. - Создайте фондовый индекс на основе цены закрытия всех акций в фрейме данных. Поскольку количество акций зависит от времени (разные даты введения, исключения из списков и т. Д.), Это необходимо учитывать при расчете процента и цены для нового фондового индекса.
Какой был бы самый простой способ выполнить эти действия? Есть ли какой-нибудь способ без необходимости перебирать все данные?
Ответ №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. Спасибо за всю помощь! 🙂