【问题标题】:R, find, dates, consecutiveR,查找,日期,连续
【发布时间】:2016-09-17 11:11:49
【问题描述】:

我的工作是在某个阈值以下的数据框中找到连续值。 首先,我从数据框中提取了一个子集,其值低于阈值。现在我的数据如下所示:

Value       dates
5105.47     1970-03-25
5398.53     1970-04-08
5520.65     1970-04-09
5052.68     1970-04-10
5406.77     1970-04-11
5501.05     1970-04-12

结果基本上是一个不规则的时间序列。现在我想确定连续的日期。对如何做有任何猜测吗?

【问题讨论】:

  • 在您的情况下,期望的结果是什么?你试过diff吗?

标签: r date threshold


【解决方案1】:

你可以试试

df1$consecutive <- c(NA,diff(as.Date(df1$dates))==1)
# > df1
#     Value      dates consecutive
# 1 5105.47 1970-03-25          NA
# 2 5398.53 1970-04-08       FALSE
# 3 5520.65 1970-04-09        TRUE
# 4 5052.68 1970-04-10        TRUE
# 5 5406.77 1970-04-11        TRUE
# 6 5501.05 1970-04-12        TRUE

通过将字符串转换为Date 格式,可以执行简单的操作,例如获取两个日期之间的差异。函数diff() 将向量作为输入,并计算向量的每个条目v[i] 与其前一个条目v[i-1] 之间的差异。差异向量显然比原始向量少了一项。由于无法确定data.frame中的第一个日期是否是连续的,因此可以合理地将其标识符设置为NA

在日期的情况下,如果差值等于 1,则日期是连续的,比较 diff(as.Date(df1$dates))==1) 的计算结果为 TRUE

数据

df1 <- structure(list(Value = c(5105.47, 5398.53, 5520.65, 5052.68, 
            5406.77, 5501.05), dates = structure(1:6, .Label = c("1970-03-25", 
            "1970-04-08", "1970-04-09", "1970-04-10", "1970-04-11", "1970-04-12"),
            class = "factor")), .Names = c("Value", "dates"), 
            class = "data.frame", row.names = c(NA, -6L))

【讨论】:

  • 很好,虽然我会用它的日期格式版本覆盖 df1$dates 而不是只在运行中进行。
  • 谢谢@Frank。我同意,我可能也会这样做。但我注意到对单行类型答案的普遍偏好;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 1970-01-01
  • 1970-01-01
  • 2019-03-24
  • 1970-01-01
相关资源
最近更新 更多