2013-05-27 4 views
0

Я искал довольно долгое время и, к сожалению, не смог найти никаких предыдущих сообщений, которые пытаются сделать то, что мне нужно. У меня есть таблица данных с 46 строками, которые индексируются по дате (позволяет называть это Data1. Data1 охватывает спорадические значения в течение трех лет (2001-2003). У меня также есть вектор дат 362 значений, который охватывает тот же диапазон дат (мы называем это Data2).R: Разделение значений, которые относятся к определенному диапазону дат

Мне нужно присвоить значение даты в Data2 на основе значений в Data1. Более конкретно, даты в Data2, которые за неделю до заданной дата в Data1 должна быть установлена к значению для этой даты в Data1. Ниже приведен пример использования первого значения в Data1 и даты в Data2:

Data1:

DATE   VALUE 
2001-01-24  17 
2001-02-17  21 
2001-03-20  18 

Data2:

DATE   VALUE 
2001-01-20 
2001-01-23 
2001-02-11 
2001-02-15 
2001-03-18 

После получения вашей помощи я должен быть в состоянии превратить Data2 в следующее:

DATE   VALUE 
2001-01-20  17 
2001-01-23  17 
2001-02-11  21 
2001-02-15  21 
2001-03-18  18 

Как даты упал в неделю до дате в Data1 и, следовательно, имеют то же значение, что и первое значение в Data1.

Надеюсь, то, что я пытаюсь сделать, здесь ясно. Я ценю вашу помощь!

+0

Можете ли вы предоставить более примерные данные, чтобы было понятно, как это будет работать? – Thomas

+0

Я добавил больше данных образца. Надеюсь, теперь это станет более ясным. Благодаря! – inDoze

ответ

0

Полезно использовать функцию dput() для предоставления данных образца при задании вопроса. Например:

Data1 <- structure(list(DATE = structure(c(11346, 11370, 11401), class = "Date"), 
    VALUE = c(17L, 21L, 18L)), .Names = c("DATE", "VALUE"), 
    row.names = c(NA, -3L), class = "data.frame") 
Data2 <- structure(list(DATE = structure(c(11342, 11345, 11364, 11368, 11399), 
    class = "Date")), .Names = "DATE", 
    row.names = c(NA, -5L), class = "data.frame") 

Вы можете использовать функцию wday() в lubridate пакете, чтобы помочь вам определить ваш «неделя», а затем объединить два набора данных на основе этого определения недели. Например:

library(lubridate) 

Data1$week <- as.numeric(Data1$DATE) - wday(Data1$DATE) 
Data2$week <- as.numeric(Data2$DATE) - wday(Data2$DATE) 
merge(Data1, Data2, by="week", all=TRUE) 

    week  DATE.x VALUE  DATE.y 
1 11335  <NA> NA 2001-01-20 
2 11342 2001-01-24 17 2001-01-23 
3 11363 2001-02-17 21 2001-02-11 
4 11363 2001-02-17 21 2001-02-15 
5 11398 2001-03-20 18 2001-03-18 
+0

Интересно. Сегодня я попробую попробовать. Спасибо за помощь. – inDoze

+0

Еще раз спасибо за вашу помощь. Хотя это не совсем решило мою проблему, я чувствую, что сейчас нахожусь на правильном пути - рассмотрение дат как числового было важным первым шагом, и теперь я работаю над получением соответствующих условных операторов, чтобы присвоить значения соответственно. Я ценю ваше время, отвечая на мой вопрос. – inDoze

Смежные вопросы