0

我搜索了很长一段时间,不幸的是找不到任何以前的帖子试图做我需要做的事情。我有一个包含 46 行的数据表,按日期索引(我们称之为Data1.Data1涵盖三年时间(2001-2003 年)的零星值。我还有一个包含相同日期范围的 362 个值长的日期向量(我们会打电话给这个Data2)。

我需要Data2根据Data1. 更具体地说,应将in Data2that 中的给定日期前一周的日期设置为 in 中该日期的值。这是一个使用 in 中的第一个值和 in 中的日期的示例:Data1Data1Data1Data2

数据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

希望我想做的事情在这里很清楚。我感谢您的帮助!

4

1 回答 1

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
于 2013-05-28T14:51:35.930 回答