【问题标题】:compare time intervals in R比较R中的时间间隔
【发布时间】:2014-12-02 09:35:13
【问题描述】:

假设我的数据框由 3 列和日期组成:

index <- c("31.10.2012", "16.06.2012")
begin <- c("22.10.2012", "29.05.2012")
end <- c("24.10.2012", "17.06.2012")

index.new <- as.Date(index, format = "%d.%m.%Y")
begin.new <- as.Date(begin, format = "%d.%m.%Y")
end.new <- as.Date(end, format = "%d.%m.%Y")

data.frame(index.new, begin.new, end.new)

我的问题:我想选择(子集)行,其中开始日期和结束日期的间隔在索引日之前的 4 天内。这显然只在第 2 行。

你能帮帮我吗?

【问题讨论】:

  • interval1interval2 是日期之间的两个差异(顺便说一句 interval2 是负数),一个不能包含另一个...要么你想知道哪个更长,要么你想知道如果 2 个第一个日期在 2 个最后一个日期之间?...
  • 我想你的意思是interval2 包含interval1?看来您正在寻找interval1 &lt;- seq(dates.new[2], dates.new[1], by = "day"); interval2 &lt;- seq(dates.new[3], dates.new[4], by = "day"); all(interval1 %in% interval2)
  • begin 和 end-date 的间隔在 index-day 之前的 4 天内”很难理解你的意思。在第二行不是 all 间隔是在 4 天内begore index.new

标签: r date


【解决方案1】:

你表达问题的方式很混乱,第一种情况是dates.new[1]&gt;dates.new[2],第二种情况是dates.new[3]&lt;dates.new[4]。把事情做好:

interval1 = c(dates.new[2], dates.new[1])
interval2 = c(dates.new[3],dates.new[4])

如果你想检查 interval2 CONTAINS interval1:

all.equal(findInterval(interval1, interval2),c(1,1))

【讨论】:

    【解决方案2】:

    请告诉我这是否可行,如果是你想要的

    library("timeDate")
    
    index <- c("31.10.2012", "16.06.2012")
    begin <- c("22.10.2012", "29.05.2012")
    end <- c("24.10.2012", "17.06.2012")
    
    index.new <- as.Date(index, format = "%d.%m.%Y")
    begin.new <- as.Date(begin, format = "%d.%m.%Y")
    end.new <- as.Date(end, format = "%d.%m.%Y")
    
    data <- data.frame(index.new, begin.new, end.new)
    
    apply(data, 1, function(x){paste(x[1]) %in% paste(timeSequence(x[2], x[3], by = "day"))})
    

    【讨论】:

      猜你喜欢
      • 2020-06-09
      • 2015-12-05
      • 2014-05-26
      • 1970-01-01
      • 2013-04-22
      • 2021-12-17
      • 2012-08-04
      • 2018-02-28
      • 1970-01-01
      相关资源
      最近更新 更多