R:分隔特定日期范围内的值

时间:2013-05-27 22:42:16

标签: r

我搜索了很长一段时间,很遗憾找不到任何以前的帖子试图做我需要做的事情。我有一个包含46行的数据表,按日期编制索引(让我们称之为Data1Data1涵盖三年后的零星价值(2001-2003)。我还有一个日期向量362值long,涵盖相同的日期范围(我们称之为Data2)。

我需要根据Data2中的值为Data1中的日期分配值。更具体地说,Data2中指定日期之前一周的Data1中的日期应设置为Data1中该日期的值。以下是使用Data1中的第一个值和Data2中的日期:

的示例

数据1:

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

数据2:

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中的第一个值具有相同的值。

希望我在这里要做的就是清楚。感谢您的帮助!

1 个答案:

答案 0 :(得分: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