R 如何从动物园对象中获取特定时间的所有日期?
假设我有一个日期/时间POSIXct的zoo对象作为索引和值:R 如何从动物园对象中获取特定时间的所有日期?,r,dataframe,zoo,R,Dataframe,Zoo,假设我有一个日期/时间POSIXct的zoo对象作为索引和值: ... val 2006-08-01 10:00:00 1 2006-08-01 10:10:00 2 2006-08-01 10:20:00 3 2006-08-01 10:30:00 4 ... 2006-08-02 10:00:00 5 2006-08-02 10:10:00 6 2006-08-02 10:20:00
... val
2006-08-01 10:00:00 1
2006-08-01 10:10:00 2
2006-08-01 10:20:00 3
2006-08-01 10:30:00 4
...
2006-08-02 10:00:00 5
2006-08-02 10:10:00 6
2006-08-02 10:20:00 7
2006-08-02 10:30:00 8
...
这应该很简单,但我想不出如何获得所有日期/时间的列表,比如说时间是上午10:10:00
动物园数据对象示例:
注意:我更喜欢base-R/zoo实现,但其他软件包可能会很感兴趣,可以使用lubridate提取时间组件。这假定秒等于0
library(lubridate)
z[hour(index(z)) == 10 & minute(index(z)) == 10]
您还可以强制使用字符,然后搜索特定时间
z[grep("10:10:00", index(z))]
出于好奇,我运行了一个基准测试。结果可能是由于类型转换,在小数据集上明显不重要
但随着您添加更多标准,速度会减慢。如果添加secondsindexz==0,则lubridate方法基本相同。grep解决方案可能是一条出路
library(microbenchmark)
benchmark <- microbenchmark(
lubridate = z[hour(index(z)) == 10 & minute(index(z)) == 10],
grep = z[grep("10:10:00", index(z))]
)
像这样使用grep或grepl。不使用其他软件包
z[grepl("10:10:00", time(z))]
## 2006-08-01 10:10:00 2006-08-02 10:10:00
## 2 6
另一种方法是使用substr或substring:
如果我们知道这些位置,那么另一种可能性就是使用它们:
z[seq(2, length(z), 4)]
## 2006-08-01 10:10:00 2006-08-02 10:10:00
## 2 6
笔记
可复制形式的输入假设如下。下面的代码似乎是复制到问题中的
Lines <- "datetime val
2006-08-01T10:00:00 1
2006-08-01T10:10:00 2
2006-08-01T10:20:00 3
2006-08-01T10:30:00 4
2006-08-02T10:00:00 5
2006-08-02T10:10:00 6
2006-08-02T10:20:00 7
2006-08-02T10:30:00 8"
library(zoo)
z <- read.zoo(text = Lines, header = TRUE, tz = "", format = "%Y-%m-%dT%T")
我们可以使用base::strftime:
z[strftimez,格式=%H:%M:%S==strftime1000-01-01 10:10:00,格式=%H:%M:%S]
> 2006-08-01 10:10:00 2006-08-02 10:10:00
> 2 5
我不想解析出时间字符串,而是说给我所有时间为10:10:00的行哇,太好了!lubridate代码假定数据中的秒数始终为0,而grep代码则不为0。
z[seq(2, length(z), 4)]
## 2006-08-01 10:10:00 2006-08-02 10:10:00
## 2 6
Lines <- "datetime val
2006-08-01T10:00:00 1
2006-08-01T10:10:00 2
2006-08-01T10:20:00 3
2006-08-01T10:30:00 4
2006-08-02T10:00:00 5
2006-08-02T10:10:00 6
2006-08-02T10:20:00 7
2006-08-02T10:30:00 8"
library(zoo)
z <- read.zoo(text = Lines, header = TRUE, tz = "", format = "%Y-%m-%dT%T")