Выполните операцию деления на сгруппированных данных, используя Tidyverse - PullRequest
0 голосов
/ 17 января 2020
Security_id Ticker Comp_Ticker Exch_Ticker YEAR MONTH DATE Security_Name                ADJ_CLOSE 
1           A      A:US        A:UN        2010  01   04    Agilent Technologies Inc.   2.093230e+01
1           A      A:US        A:UN        2020  01   10    Agilent Technologies Inc.   8.759000e+01
8           AAL    AAL:US      AAL:UW      2010  01   04    American Airlines Group Inc 4.511977e+00
8           AAL    AAL:US      AAL:UW      2020  01   10    American Airlines Group Inc 2.732000e+01

У меня есть DataFrame в указанном выше формате. Я хочу разделить ADJ_CLOSE 2020 года на ADJ_CLOSE 2010 года на TICKER Groupings

Как мне это сделать / можно ли это сделать? в формате d <- d%>% group_by (TICKER)%>% ( Fn здесь )?

Ответы [ 2 ]

2 голосов
/ 17 января 2020

При условии отсутствия дубликатов для 'Year' в каждом 'TICKER', используйте либо ==, либо match, чтобы вернуть логический или числовой индекс c, чтобы отфильтровать 'ADJ_CLOSE' для каждого 'Year', а затем разделить

library(dplyr)
d %>% 
  group_by(TICKER) %>% 
  summarize(out = ADJ_CLOSE[Year == 2020]/ADJ_CLOSE[Year == 2010])
1 голос
/ 17 января 2020

Если у вас есть данные только за 2010 и 2020 годы, мы можем arrange данные на Ticker и YEAR, group_by Ticker и разделить last значение ADJ_CLOSE на first.

library(dplyr)

df %>%
  arrange(Ticker, YEAR) %>%
  group_by(Ticker) %>%
  summarise(ratio = last(ADJ_CLOSE)/first(ADJ_CLOSE))

# A tibble: 2 x 2
#  Ticker ratio
#  <fct>  <dbl>
#1 A       4.18
#2 AAL     6.05

Если у вас есть данные и за другие годы, вы можете сначала filter данные, а затем использовать тот же код.

df %>%
  filter(YEAR %in% c(2020, 2010)) %>%
  arrange(Ticker, YEAR) %>%
  group_by(Ticker) %>%
  summarise(diff = last(ADJ_CLOSE)/first(ADJ_CLOSE))

данные

df <- structure(list(Security_id = c(1L, 1L, 8L, 8L), Ticker = structure(c(1L, 
1L, 2L, 2L), .Label = c("A", "AAL"), class = "factor"), Comp_Ticker = structure(c(1L, 
1L, 2L, 2L), .Label = c("A:US", "AAL:US"), class = "factor"), 
Exch_Ticker = structure(c(1L, 1L, 2L, 2L), .Label = c("A:UN", 
"AAL:UW"), class = "factor"), YEAR = c(2010L, 2020L, 2010L, 
2020L), MONTH = c(1L, 1L, 1L, 1L), DATE = c(4L, 10L, 4L, 
10L), Security_Name = structure(c(1L, 1L, 2L, 2L), .Label = c("AgilentTechnologiesInc.", 
"AmericanAirlinesGroupInc"), class = "factor"), ADJ_CLOSE = c(20.9323, 
87.59, 4.511977, 27.32)), class = "data.frame", row.names = c(NA, -4L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...