Я хотел бы проверить, существует ли (ExDate-n) в таблице дивидендов в столбце даты в таблице StockPrice, где n - инкрементная переменная.
Если (ExDate-n) существует в таблице StockPrice, я назначу Exminus1 как ExDate-n
Сначала он начинается с n = 1 (то есть вчера) и заканчивается, когда (ExDate-n) существует в таблице StockPrice.
Поэтому я создал цикл for, но он не сработал.
Я пробовал цикл for с оператором if и оператором% in%, но он не работал.
Это оригинальные таблицы.
Таблица запасов:

Дивидендная таблица:

Окончательный вывод:

#Install necessary packages
install.packages('quantmod')
install.packages('plyr')
install.packages('dplyr')
library('quantmod')
library('plyr')
library('dplyr')
#################################### Input No. ########################################
StockNo <- "6823.hk"
startDate <- "2001-01-01"
#################################### Input No. ########################################
# Stock price Data
stockData <- new.env() #Make a new environment for quantmod to store data in
startDate = as.Date(StartDate) #Specify period of time we are interested in
endDate = Sys.Date()
tickers <- c(StockNo) #Define the tickers we are interested in
StockPrice <- getSymbols(tickers, env = stockData, src = "yahoo", from = startDate, to = endDate, auto.assign = FALSE)
StockPrice <- as.data.frame(StockPrice)
StockPrice <- cbind(Date=as.Date(rownames(StockPrice)),StockPrice)
#Dividend data
Dividend <- getDividends(tickers, env = stockData, src = "yahoo", from = startDate, to = endDate, auto.assign = FALSE)
Dividend <- as.data.frame(Dividend)
Dividend <- cbind(ExDate=as.Date(rownames(Dividend)),Dividend)
# Create Ex Date - 1
#!!!!!!!!!!!!!!!!!!! Here is where I had issue with
for (previous in (1:6))
{
if ( (Dividend$ExDate - previous ) %in% StockPrice$Date)
{
Dividend$Exminus1 <- Dividend$ExDate-previous
break;
}
previous <- previous+1
}
#New <- Dividend[,c(3,1,2)]
#Dividend
#Combine Stock Price & Dividend
CombineTable <- left_join (StockPrice, Dividend , by = c("Date"="Exminus1"))
#Calculate Yield
CombineTable$Yield <- CombineTable[,9]/CombineTable[,5]
#Preapre Month / Year for more segments
CombineTable$Month <- format(as.Date(CombineTable$ExDate, format="%d/%m/%Y"),"%m")
CombineTable$Year <- format(as.Date(CombineTable$ExDate, format="%d/%m/%Y"),"%Y")
tail(CombineTable)
## Get Data with Dividend Only
DivOnlyData <- CombineTable [ !is.na(CombineTable$ExDate) ,]
DivOnlyData
Я попробовал метод ifelse, но все равно не повезло.
Новый столбец Dividend $ Exminus1 всегда возвращает Dividend $ ExDate - 5, даже если вложенный оператор ifelse верен, когда я его только запускаю.
ifelse ( (Dividend$ExDate - 1) %in% StockPrice$Date ,Dividend$Exminus1 <- Dividend$ExDate-1 ,
ifelse ( (Dividend$ExDate - 2) %in% StockPrice$Date , Dividend$Exminus1 <- Dividend$ExDate-2,
ifelse ( (Dividend$ExDate - 3) %in% StockPrice$Date , Dividend$Exminus1 <- Dividend$ExDate-3 ,
ifelse ( (Dividend$ExDate - 4) %in% StockPrice$Date , Dividend$Exminus1 <- Dividend$ExDate-4 ,
ifelse ( (Dividend$ExDate - 5) %in% StockPrice$Date , Dividend$Exminus1 <- Dividend$ExDate-5 ,NA)))))