날짜 범위에 대한 주가의 시가 총액과 가격이 포함 된 데이터 집합이 있습니다. 기간 중 일부 날짜가 누락되었습니다. 나는 x 일 전의 가격 (x는 일일 차이를 나타내는 숫자의 목록)에서 현재 가격이 얼마만큼 변경되었는지를 보여주는 새로운 변수를 효율적으로 만들고 싶습니다.불완전한 날짜 열을 사용하여 R의 동적 날짜 차이에 따라 변경 변수를 효율적으로 만드는 방법
예를 들어, 내가 가진 D1 :
d1 <- structure(list(Date = c(as.Date("2017-10-28"), as.Date("2017-10-27"), as.Date("2017-10-26"),
as.Date("2017-10-24"), as.Date("2017-10-21"), as.Date("2017-10-20")),
Price = c(100L, 98L, 102L, 97L, 96L, 100L),
MC = c(50L, 55L, 49L, 47L, 50L, 46L)),
.Names = c("Date", "Price", "MC"))
d1<-as.data.frame(d1)
내 욕망 (D2)를 만드는 것입니다 (I 1과 2 일간의 변화에 관심이 가정) : 변경 변수는
d2 <- structure(list(Date = c(as.Date("2017-10-28"), as.Date("2017-10-27"), as.Date("2017-10-26"),
as.Date("2017-10-24"), as.Date("2017-10-21"), as.Date("2017-10-20")),
Price = c(100L, 98L, 102L, 97L, 96L, 100L),
MC = c(50L, 55L, 49L, 47L, 50L, 46L),
Delta1Price = c(0.0204, -0.0392, NA, NA, -0.04, NA),
Delta1MC = c(-0.0909, 0.12244, NA, NA, 0.0869, NA),
Delta2Price = c(-0.0196, NA, 0.0515, NA, NA, NA),
Delta2MC = c(0.0204, NA, 0.04255, NA, NA, NA)),
.Names = c("Date", "Price", "MC", "Delta1Price", "Delta1MC", "Delta2Price", "Delta2MC"))
d2<-as.data.frame(d2)
(currentValue - previousValue)/PreviousValue에 의해 계산 됨
for 루프를 사용하여 이렇게하는 것이 비효율적 인 방법입니다.
# Assume d1 and d2 are dataframes #
nms <- colnames(d1)[c(2:3)]
changeList <- c(1:2)
for (i in changeList){
#record the dates that will be used to calculate changes
currentDate <- d1$Date
revDate <- currentDate-i
#filter out the rows for the older relevant date
revData <- d1 %>%
dplyr::filter(d1$Date %in% revDate)
#Get the newer dates that are available
newCurDate <- revData$Date+i
newCurData <- d1 %>%
dplyr::filter(d1$Date %in% newCurDate)
#calculate the change variables
changes <- (newCurData[, nms] - revData[,nms])/revData[,nms]
#dynamically name these new change variables
newCurData[, paste("Delta", paste(i, nms, sep=""), sep="")]<- changes
#merge the data to get desired outcome
d1 <- merge(d1, newCurData, all=TRUE)
}
#final output should be the same d2 that I structured
d2 <- d1
도움말 Arthur에게 감사드립니다. 나는 재정과 시계열에 관한 과제 페이지를 점검 할 것이다. 나는 자기 문제를 설명하기 위해서만 자기 조인을했으나 그것이 가장 효율적인 방법인지는 확신 할 수 없었다. 지연 방법의 관점에서 이전에 몇 가지 게시물을 살펴 봤지만 시계열이 일정한 간격을 유지하면 제대로 작동하는 것으로 보입니다. 필자의 경우에는 몇 가지 누락 날짜가 있기 때문에 일관성없는 시계열 데이터가 있습니다. –
내 답변을 수정했습니다. 나는 그렇게 간단하지 않다는 것을 인정한다 : D – Arthur