我搜索了很长一段时间,很遗憾找不到任何以前的帖子试图做我需要做的事情。我有一个包含46行的数据表,按日期编制索引(让我们称之为Data1
。Data1
涵盖三年后的零星价值(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
中的第一个值具有相同的值。
希望我在这里要做的就是清楚。感谢您的帮助!
答案 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