У меня большой несбалансированный набор данных (около 2000 акций), состоящий из данных о возврате акций, и теперь я хочу изменить данные о возврате, чтобы все закончилось в одну и ту же дату.
Мои данные выглядят так:
Date RF STOCK-A STOCK-B STOCK-C STOCK-D
1990-11-30 0,03 0,20 0,30 -0,40 0,90
1990-12-31 0,10 0,30 0,30 -0,40 0,34
1991-01-31 0,12 0,90 0,30 -0,60 0,78
1991-02-28 0,03 0,12 0,30 NA 0,50
1991-03-31 0,04 0,14 0,30 NA 0,12
1991-04-30 0,05 0,18 0,30 NA 0,11
1991-05-31 0,03 0,00 NA NA NA
1991-06-30 0,00 0,20 NA NA NA
Моя проблема в том, что я хочу, чтобы все возвраты акций заканчивались в 1991-06-30 гг., И вместо этого заполняю NA в ранние сроки, чтобы это выглядело так:
Date RF STOCK-A STOCK-B STOCK-C STOCK-D
1990-11-30 0,03 0,20 NA - NA NA
1990-12-31 0,10 0,30 NA NA NA
1991-01-31 0,12 0,90 0,30 NA 0,90
1991-02-28 0,03 0,12 0,30 NA 0,34
1991-03-31 0,04 0,14 0,30 NA 0,78
1991-04-30 0,05 0,18 0,30 -0,40 0,50
1991-05-31 0,03 0,00 0,30 -0,40 0,12
1991-06-30 0,00 0,20 0,30 -0,60 0,11
Я пытался использовать функцию задержки следующим образом:
data2 <- if (any(is.na(data$STOCK-B))==TRUE){
lag(data$STOCK-B, k= -sum(is.na(data$STOCK-B)))
}else {
any(is.na(data$STOCK-B)==FALSE)
lag(data$STOCK-B, k=0)
}
Моя идея состояла в том, чтобы реализовать его в цикле for, но он не работает и просто возвращает атомный вектор.
Я нашел другой метод с пакетом DataCombine:
Data1 <- slide(data, Var = "data$STOCK-B", slideBy = -sum(is.na(data$STOCK-
B)))
Он перемещает данные вниз по желанию, но вводит новую переменную в набор данных. Конечно, я могу использовать этот метод и затем извлечь новые переменные в новый набор данных, но как это делает его более эффективным?
Заранее спасибо !!