I have some xts data and I want to perform a calculation over each of the columns. Say I have some daily closing prices such as:
TSLA.Close AMZN.Close MSFT.Close
2017-01-03 216.99 753.67 62.58
2017-01-04 226.99 757.18 62.30
2017-01-05 226.75 780.45 62.30
2017-01-06 229.01 795.99 62.84
I want to apply some function such that if todays close is higher than yesterdays then give a 1 else a 0 and store the results in a new xts object.
I have the following - which converts the xts object to a numeric - if I change apply to lapply I get a list.
However, I would like to just return an xts object similar to that of the daily_close xts object.
Data:
library(xts)
library(quantmod)
start_date <- "2017-01-01"
end_date <- "2020-01-01"
symbols = c("TSLA", "AMZN", "MSFT")
dataEnv <- new.env()
getSymbols(symbols,
from = start_date,
to = end_date,
#src = "yahoo",
#adjust = TRUE,
#env = dataEnv
)
daily_close <- do.call(merge, lapply(symbols, function(x) Cl(get(x))))
# todays close greater than yesterdays close
x <- apply(daily_close, 2, FUN = function(x) ifelse (x > lag.xts(x), 1, 0))