2015-04-17 2 views
1

У меня есть данные о формеЭффективная репликация данных в R

dates = as.Date(c("2015-04-07","2015-04-07","2015-04-08","2015-04-08")) 
hour = rep(c(1,2),2) 
value = c(3,6,8,4) 
example.data = data.frame(dates,hour,value) 

, который дает

 dates hour value 
1 2015-04-07 1  3 
2 2015-04-07 2  6 
3 2015-04-08 1  8 
4 2015-04-08 2  4 

, и я хотел бы, чтобы генерировать данные для каждой четверти часа с постоянной заполнить.

Результаты должны быть

 dates hour qhour value 
1 2015-04-07 1 0  3 
2 2015-04-07 1 1  3 
3 2015-04-07 1 2  3 
4 2015-04-07 1 3  3 
5 2015-04-07 2 0  6 
6 2015-04-07 2 1  6 
7 2015-04-07 2 2  6 

и так далее. Таким образом, просто повторяется каждое значение в час за каждый квартал, если час в течение этого соответствующего часа. Можно ли это сделать, используя sqldf или что-то подобное. Конечно, мои данные заданы, если намного больше, чем пример.

+2

Для этого в пакете 'splitstackshape' предусмотрена оберточная функция. Попробуйте 'library (splitstackshape); expandRows (example.data, 4, count.is.col = FALSE) ' –

ответ

3

Является ли это достаточно эффективным?

DF <- example.data[rep(seq_len(nrow(example.data)), each = 4),] 
DF$qhour <- 0:3 
#   dates hour value qhour 
#1 2015-04-07 1  3  0 
#1.1 2015-04-07 1  3  1 
#1.2 2015-04-07 1  3  2 
#1.3 2015-04-07 1  3  3 
#2 2015-04-07 2  6  0 
#2.1 2015-04-07 2  6  1 
#2.2 2015-04-07 2  6  2 
#2.3 2015-04-07 2  6  3 
#3 2015-04-08 1  8  0 
#3.1 2015-04-08 1  8  1 
#3.2 2015-04-08 1  8  2 
#3.3 2015-04-08 1  8  3 
#4 2015-04-08 2  4  0 
#4.1 2015-04-08 2  4  1 
#4.2 2015-04-08 2  4  2 
#4.3 2015-04-08 2  4  3 
+0

Именно то, что я искал. – Richard