Я пытаюсь добавить столбец после того, как я преобразовал xts в dataframe, поскольку xts могут включать только числовые значения. Дополнительный Я хочу связать их по строке в качестве конечного результата, но я терпеть неудачу и не нахожу решение. Вот мой код, который собирается от разных авторов в stackoverflow. Благодаря этому!Добавить столбец с тикером после преобразования зоопарка в dataframe
library(quantmod)
# Fetch all Symbols from AMEX
symbols <- stockSymbols(exchange = c("AMEX"))
symbols <- symbols[,1]
# define environment
data <- new.env()
# Load Stock data in environment
getSymbols(symbols,from="2016-01-01", env=data)
# build function to convert zoo to dataframe
zoo.to.data.frame <- function(x, index.name="Date") {
stopifnot(is.zoo(x))
xn <- if(is.null(dim(x))) deparse(substitute(x)) else colnames(x)
setNames(data.frame(index(x), x, row.names=NULL), c(index.name,xn))
}
# build function to calculate different signals (...only price and ADX in this example)
"SignalCalculator" <- function(x) {
# Adjusted Price
price <- x[,c(6)]
# ADX
adx <- ADX(x[,c("High","Low","Close")], n =14)
DIp <- adx$DIp
DIn <- adx$DIn
Adx <- adx$ADX
# bind single values together and convert to dataframe
result <- zoo.to.data.frame(cbind(price, DIp, DIn, Adx))
# the following is not working respectively I don´t know how to
# result2 <- cbind(result, Ticker = x)
}
# Loop function on data #
lapply(data,FUN = SignalCalculator)
То, что я хотел бы сделать после того, как функция применяется ко всем линеечке, чтобы сформировать один огромный dataframe с рядом связывается со всем тикером внутри, чтобы экспортировать их в файл CSV. Это должно выглядеть следующим образом. Но для меня непонятно, как связать их вместе? Я ценю любую помощь по этой теме. Благодарю.
Отлично! Вот как это должно выглядеть. Спасибо за упрощение моего кода! Только один вопрос. Можно ли выбрать только последнюю дату для каждого тикера? – Sven
Конечно. Предполагая, что последняя дата может отличаться для каждого тикера, простой подход: 'library (data.table); dt_out <- as.data.table (out2); dt_out [Date == max (Date), SD, by = list (Ticker)]; ' – FXQuantTrader
Ok. Это выглядит хорошо. Когда я запускаю код, он показывает мне результаты, как это должно быть в консоли. Но когда я запускаю 'View (dt_out)' я получаю все даты, как раньше? – Sven