Я пытаюсь зациклить несколько фреймов данных в R и извлечь один столбец из каждого фрейма данных и вычесть значение элемента в отдельном списке.Например, я хочу
df1$my_new_col<-df1$my_col - my_list[[1]]
df2$my_new_col<-df2$my_col - my_list[[2]]
etc...
Код, который я написал, извлекает только последний элемент в списке и использует его во всех вычислениях.
Проще говоря, у меня есть один список, называемый датами, который представляет собой список дат, и другой список, называемый spx_list, который представляет собой список годовых отчетов S & P 500.
В моем коде япопытка перебрать каждую дату и извлечь фрейм данных о возвратах акций на эту дату.Во втором цикле я зацикливаюсь на списке возвратов S & P, которые также соответствуют каждой дате, и я пытаюсь вычесть каждое возвращение S & P 500 из дохода каждой акции в этот период.Мои кадры данных выглядят следующим образом при извлечении для каждой даты:
Для даты 1
Ticker Name Total.Return.Y.3..I.
JNS US Equity JANUS CAPITAL GR 25.27
UNP US Equity UNION PAC CORP 24.98
CVX US Equity CHEVRON CORP 24.87
BHI US Equity BAKER HUGHES A G 24.81
RAI US Equity REYNOLDS AMERICA 24.72
XOM US Equity EXXON MOBIL CORP 24.55
CBRE US Equity CBRE GROUP INC-A 24.43
GT US Equity GOODYEAR TIRE 24.39
Для даты 2
Ticker Name Total.Return.Y.3..I.
JNS US Equity JANUS CAPITAL GR 21.03
UNP US Equity UNION PAC CORP 16.33
CVX US Equity CHEVRON CORP 12.21
BHI US Equity BAKER HUGHES A G 47.69
RAI US Equity REYNOLDS AMERICA 18.39
XOM US Equity EXXON MOBIL CORP 24.50
CBRE US Equity CBRE GROUP INC-A 10.81
GT US Equity GOODYEAR TIRE 11.13
И для моих данных S & P:
Ticker date Annualized 3
SPX INDEX 3/31/2019 11.22854225
SPX INDEX 12/31/2018 7.041799573
SPX INDEX 9/30/2018 14.91926793
SPX INDEX 6/30/2018 9.629826851
Список данных
dates <- list('2019-03-31','2018-12-31','2018-09-30','2018-06-30',
'2018-03-31','2017-12-31','2017-09-30','2017-06-30',
'2017-03-31','2016-12-31','2016-09-30','2016-06-30',
'2016-03-31','2015-12-31','2015-09-30','2015-06-30',
'2015-03-31','2014-12-31','2014-09-30','2014-06-30',
'2014-03-31','2013-12-31','2013-09-30','2013-06-30',
'2013-03-31','2012-12-31','2012-09-30','2012-06-30',
'2012-03-31','2011-12-31','2011-09-30','2011-06-30',
'2011-03-31','2010-12-31','2010-09-30','2010-06-30',
'2010-03-31','2009-12-31','2009-09-30','2009-06-30',
'2009-03-31','2008-12-31','2008-09-30','2008-06-30',
'2008-03-31','2007-12-31','2007-09-30','2007-06-30',
'2007-03-31','2006-12-31','2006-09-30','2006-06-30',
'2006-03-31','2005-12-31','2005-09-30','2005-06-30',
'2005-03-31','2004-12-31','2004-09-30','2004-06-30',
'2004-03-31','2003-12-31','2003-09-30','2003-06-30',
'2003-03-31','2002-12-31','2002-09-30','2002-06-30',
'2002-03-31','2001-12-31','2001-09-30','2001-06-30',
'2001-03-31','2000-12-31','2000-09-30','2000-06-30',
'2000-03-31')
Код
library(Rblpapi)
blpConnect()
library(dplyr)
spx <- read.csv('spx_3.csv')
spx_list <- as.list(spx$Annualized.3)
totals <- list()
returns <- list()
for(i in dates){
df <- beqs('ROLLING RETURNS','PRIVATE',date=as.Date(i))
df_beats <- df%>%
select(date,Ticker,Total.Return.Y.3..I.)
df_beats <- na.omit(df_beats)
for(j in 1:length(spx_list)){
df_beats$Relative_Performance <- df_beats$Total.Return.Y.3..I.-spx_list[[j]]
counts <- sum(df_beats$Relative_Performance>0)
yes <- df_beats%>%
filter(df_beats$Relative_Performance>0)
averages <- mean(yes$Total.Return.Y.3..I.)
totals[[i]] <- counts
returns[[i]] <- averages
}
}
Цель состоит в том, чтобы определить, какой процент акций превзошел S & P 500 в данномгод и выяснить, насколько каждая акция уступает или превосходит, вычитая доходность S & P 500 из индивидуальной доходности акции.
Когда цикл завершен, я обнаружил, что используется только последний элемент списка S & P 500в расчетах остальные возвраты пропускаются.Таким образом, в этом случае значение 9,629 используется в расчете для каждого кадра данных в каждом периоде времени.В идеале я хотел бы, чтобы у Date 1 Total.Return.Y.3..I было вычтено 11,22, а у Date 2 $ Total.Return.Y.3..I у меня было вычтено 7,04 итд ...
Мне было интересно, сможет ли кто-нибудь помочь мне извлечь данные за каждый период, а не просто использовать последний элемент в списке S & P 500?