Попробуйте обобщить процесс повторяющегося кода для создания списка фреймов данных с lapply
, используя ...
для динамических c параметров любой длины. Затем запустите цепочку слияния с Reduce
, все с использованием базы R:
df_build <- function(x, y, ...) {
df_list <- lapply(..., function(df)
# ROW AND COLUMN INDEXING
df[df$Date >= x & df$Date <= y, c(1,2)]
)
# CHAIN MERGE FULL JOIN
merged_df <- Reduce(function(x, y) merge(x, y, all=TRUE, by=c("Date")),
df_list)
}
# MAY 2018 FUTURES
DATE1_May <- as.Date("2017-11-16")
DATE2_May <- as.Date("2018-02-15")
may_2018_df <- df_build(DATE1_May, DATE2_May,
May18, July18, September18,
December18, March19, May19,
July19, September19, December19)
# MAY 2017 FUTURES
DATE1_May <- as.Date("2016-11-16")
DATE2_May <- as.Date("2017-02-15")
may_2017_df <- df_build(DATE1_May, DATE2_May,
May17, July17, September17,
December17, March18, May18,
July18, September18, December18)
Может даже быть динамический способ c для построения списка фреймов данных майского фьючерса с использованием get
и paste0
динамически ссылаться на объекты по строке. Ниже строится с 2010 по 2018 год и использует выше df_build()
. Отрегулируйте при необходимости.
may_futures_list <- lapply(c(2010:2018), function(yr) {
DATE1_May <- as.Date(paste0(yr-1, "-11-16"))
DATE2_May <- as.Date(paste0(yr, "-02-15"))
may_df <- df_build(DATE1_May, DATE2_May,
get(paste0("May", yr)),
get(paste0("July", yr)),
get(paste0("September", yr)),
get(paste0("December", yr)),
get(paste0("March", yr+1)),
get(paste0("May", yr+1)),
get(paste0("July", yr+1)),
get(paste0("September", yr+1)),
get(paste0("December", yr+1))
)
})
# RENAME LIST ELEMENTS
may_futures_list <- setNames(may_futures_list,
as.character(c(2010:2018))
)
# RETRIEVE INDIVIDUALS DATA FRAMES
may_futures_list$`2018`
may_futures_list$`2017`
may_futures_list$`2016`
...