R - Найти значение на основе критерия - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть датафрейм DF, в котором у меня множество столбцов, один с датами, а другой - с часом. Моя точка зрения заключается в том, что мне нужно найти ЦЕНУ (дай данные за 36 часов до этого. Все мои дни не имеют 24 часа, поэтому я не могу просто перенести свой набор данных. Моя идея состояла в том, чтобы поискать накануне в моем наборе данных & 12 часов назад.

Это то, что я написал, но это не работает:

for (i in 38:nrow(DF)){


RefDay=as.Date(DF$Date[i])
  HourRef=DF$Hour[i]


DF$P24[i]=DF[which(DF$Date == (RefDay-1))& which(DF$Hour == (HourRef-36)),"PRICE"]


}

Вот мой DF:

'data.frame':   20895 obs. of  45 variables:
 $ Hour                           : Factor w/ 24 levels "0","1","2","3",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ Date                           : POSIXct, format: "2016-07-01" "2016-07-01" "2016-07-01" "2016-07-01" ...
 $ PRICE                          : num  29.4 24.7 23.4 21.9 20.2 ...

Вот пример моих данных:

  DF.Hour    DF.Date DF.PRICE
1       0 2016-07-01    29.36
2       1 2016-07-01    24.69
3       2 2016-07-01    23.42
4       3 2016-07-01    21.91
5       4 2016-07-01    20.19
6       5 2016-07-01    22.44

Заранее спасибо за помощь!

1 Ответ

0 голосов
/ 09 ноября 2018

Попробуйте заполнить data.frame полными днями.Вы можете сделать это с полной в Tidyr.Это заполнит несуществующие значения с помощью NA.Если у вас есть какие-либо NA в вашем полном data.frame, вы можете перейти к 36-му элементу, например, с лагом (цена, 36).

DF <- complete(DF, Hour, Date) %>% arrange(Date) 
DF$Price[is.na(DF$Price)] <- lag(Price, 36)
...