[英]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 年的數據,我們可以按Ticker
和YEAR
arrange
數據, group_by
Ticker
並將ADJ_CLOSE
的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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.