【问题标题】:R: Separating values that fall within a certain date rangeR:分隔特定日期范围内的值
【发布时间】:2013-05-28 22:51:35
【问题描述】:

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

我需要根据Data1 中的值为Data2 中的日期赋值。更具体地说,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 中的第一个值具有相同的值。

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

【问题讨论】:

  • 您能否提供更多示例数据,以便更清楚地了解其工作原理?
  • 我添加了更多示例数据。希望现在更清楚了。谢谢!

标签: r


【解决方案1】:

在提问时使用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")

您可以使用lubridate 包中的wday() 函数来帮助您定义“周”,然后根据此周定义合并两个数据集。例如:

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

【讨论】:

  • 有趣。我会在今天晚些时候试一试。感谢您的帮助。
  • 再次感谢您的帮助。虽然这并没有完全解决我的问题,但我觉得我现在走在正确的轨道上 - 将日期视为数字是重要的第一步,现在我正在努力获取适当的条件语句以便分配值适当地。感谢您抽出宝贵时间回答我的问题。
猜你喜欢
  • 2014-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多