ticker
не может быть кадром данных, но должен быть символом. Поэтому с приложением, которое вы используете для создания суперкадра данных, у вас возникнут проблемы. Следующая функция дает метки для разных тикеров.
bar_color <- function(ticker){
x <- getSymbols(ticker,auto.assign=FALSE)
n <- nrow(x)
switch(
sign(x[n,1]-x[n,4])+2,
"Green Bar",
"Doji Bar",
"Red Bar")
}
> TLT <- c("F","QQQQ")
> cbind(TLT,sapply(TLT,bar_color))
TLT
F "F" "Green Bar"
QQQQ "QQQQ" "Red Bar"
Если вам нужны метки для одного тикера, но разных дат, то это то, что вы ищете:
bar_color <- function(ticker){
x <- as.data.frame(getSymbols(ticker,auto.assign=FALSE))
x$barcolor <- sapply(
as.numeric(sign(x[,1]-x[,4])+2),
function(j) switch(j,"Green Bar","Doji Bar","Red Bar")
)
return(x)
}
> head(bar_color("F"))
F.Open F.High F.Low F.Close F.Volume F.Adjusted barcolor
2007-01-03 7.56 7.67 7.44 7.51 78652200 7.51 Red Bar
2007-01-04 7.56 7.72 7.43 7.70 63454900 7.70 Green Bar
2007-01-05 7.72 7.75 7.57 7.62 40562100 7.62 Red Bar
2007-01-08 7.63 7.75 7.62 7.73 48938500 7.73 Green Bar
2007-01-09 7.75 7.86 7.73 7.79 56732200 7.79 Green Bar
2007-01-10 7.79 7.79 7.67 7.73 42397100 7.73 Red Bar
Проблема, с которой вы, скорее всего, столкнулись, заключается в том, что getSymbols возвращает вам не фрейм данных, а объект xts. Для xts существуют специальные методы доступа и добавления данных, и не следует ожидать, что это будет вести себя как фрейм данных.
> X <- getSymbols("F",auto.assign=FALSE)
> class(X)
[1] "xts" "zoo"