簡體   English   中英

使用 tidyverse 對分組數據進行除法運算

[英]Perform division operation on grouped data using tidyverse

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 我想通過 TICKER Groupings 將 2020 年的 ADJ_CLOSE 除以 2010 年的 ADJ_CLOSE

我將如何/是否可以使用 d <- d %>% group_by (TICKER) %>% summary ( Fn here ) 格式執行此操作?

假設每個 'TICKER' 中的 'Year' 沒有重復,使用==match返回邏輯或數字索引來過濾每個 'Year' 的 'ADJ_CLOSE' 然后除以

library(dplyr)
d %>% 
  group_by(TICKER) %>% 
  summarize(out = ADJ_CLOSE[Year == 2020]/ADJ_CLOSE[Year == 2010])

如果您只有 2010 年和 2020 年的數據,我們可以按TickerYEAR arrange數據, group_by Ticker並將ADJ_CLOSElastADJ_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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM