【问题标题】:How to remove chosen timestamps in R [duplicate]如何删除R中选择的时间戳[重复]
【发布时间】:2021-10-21 09:05:34
【问题描述】:

如果数据不是来自 08:00:00 到 18:00:00 之间的时间戳,我需要删除 R 中不同日期的数据。

如果有一列将日期和时间放在一起,是否更容易删除它们,或者我应该先将它们分开,以便我有一个带有日期的列和另一个带有时间的列?

timestamp Price
2001-02-02 20:15:00 0.01
2001-02-02 21:17:00 0.05
2001-02-03 10:10:00 0.03

我几乎每天都有 2005 年到 2020 年的数据。 执行这个例子中的任务,我希望只剩下给定返回的 2001-02-03 10:10:00。

感谢您的帮助!

【问题讨论】:

标签: r dataframe timestamp


【解决方案1】:

虽然原生 R 没有 Time(无日期)类,但幸运的是仍然可以与 %H:%M:%S 进行比较,并且它们会正确比较。

dat <- structure(list(timestamp = structure(c(981162900, 981166620, 981213000), class = c("POSIXct", "POSIXt"), tzone = ""), Price = c(0.01, 0.05, 0.03)), row.names = c(NA, -3L), class = "data.frame")

# assuming `timestamp` is `POSIXt` class
format(dat$timestamp, format = "%H:%M:%S")
# [1] "20:15:00" "21:17:00" "10:10:00"
class(format(dat$timestamp, format = "%H:%M:%S"))
# [1] "character"

between(format(dat$timestamp, format = "%H:%M:%S"), "08:00:00", "18:00:00")
# [1] FALSE FALSE  TRUE

这适用于dplyr::betweendata.table::between。如果您两者都没有或两者都不想要,它仍然可以通过简单的比较来工作,您可以用自己的功能来模仿这些功能:

mybetween <- function(x, a, b) x >= a & x <= b
mybetween(format(dat$timestamp, format = "%H:%M:%S"), "08:00:00", "18:00:00")
# [1] FALSE FALSE  TRUE

【讨论】:

  • 感谢您的快速回复。我不完全理解结构背后的想法。如果我有一个带有 100 万个时间戳的数据框……为每个时间戳键入这些内容会很费力,还是我错了? “mybetween”的第一行是否将左侧数据写入数据帧?
  • dat[between(...),] 将返回介于两次之间的那些行,无论是 3 行还是 3M。
猜你喜欢
  • 2013-08-22
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-22
  • 2020-11-03
  • 2022-10-14
相关资源
最近更新 更多