过滤某些月份的 POSIXct 日期时间

Posted

技术标签:

【中文标题】过滤某些月份的 POSIXct 日期时间【英文标题】:Filter POSIXct date times for certain months 【发布时间】:2021-12-28 09:05:34 【问题描述】:

我有一个包含 POSIXct 日期时间戳 ($acquisition_time) 的数据集。我需要过滤此数据集中所有日期时间戳为 6 月、7 月、8 月或 9 月的行。

这是我的数据样本:

> data
   animals_id    acquisition_time longitude latitude      projection collar_type
1           1 2010-01-05 19:59:00  7.611712 47.94893 EPSG:4326-WGS48         gps
2           1 2010-02-06 02:59:00  7.611367 47.95333 EPSG:4326-WGS48         gps
3           1 2010-03-06 23:59:00  7.612298 47.95245 EPSG:4326-WGS48         gps
4           1 2010-03-07 20:59:00  7.621620 47.95849 EPSG:4326-WGS48         gps
5           1 2010-04-08 17:59:00  7.611142 47.95456 EPSG:4326-WGS48         gps
6           1 2010-04-09 00:59:00  7.619372 47.95881 EPSG:4326-WGS48         gps
7           1 2010-05-09 07:59:00  7.612473 47.95379 EPSG:4326-WGS48         gps
8           1 2010-06-10 04:59:00  7.613174 47.95429 EPSG:4326-WGS48         gps
9           1 2010-06-11 22:59:00  7.612589 47.95584 EPSG:4326-WGS48         gps
10          1 2010-07-12 19:59:00  7.613384 47.95734 EPSG:4326-WGS48         gps
11          1 2010-08-13 16:59:00  7.612884 47.95448 EPSG:4326-WGS48         gps
12          1 2010-08-13 23:59:00  7.614389 47.95932 EPSG:4326-WGS48         gps
13          1 2010-08-14 20:59:00  7.617362 47.96213 EPSG:4326-WGS48         gps
14          1 2010-09-15 03:59:00  7.612436 47.95579 EPSG:4326-WGS48         gps
15          1 2010-09-15 17:59:00  7.616448 47.95875 EPSG:4326-WGS48         gps
16          1 2010-09-16 01:00:00  7.611193 47.95464 EPSG:4326-WGS48         gps
17          1 2010-10-16 21:59:00  7.619343 47.96087 EPSG:4326-WGS48         gps
18          1 2010-10-18 01:59:00  7.619420 47.95877 EPSG:4326-WGS48         gps
19          1 2010-11-18 22:59:00  7.624575 47.95586 EPSG:4326-WGS48         gps
20          1 2010-12-19 12:59:00  7.615908 47.95812 EPSG:4326-WGS48         gps
21          1 2010-01-20 23:59:00  7.605586 47.93908 EPSG:4326-WGS48         gps
22          1 2010-02-21 20:59:00  7.627373 47.96214 EPSG:4326-WGS48         gps
23          1 2010-02-22 03:59:00  7.625065 47.95793 EPSG:4326-WGS48         gps
24          1 2010-02-22 17:59:00  7.614603 47.95174 EPSG:4326-WGS48         gps
25          1 2010-02-23 07:59:00  7.613502 47.95427 EPSG:4326-WGS48         gps
   study_area_id animals_age_class animals_sex
1             13                 s           f
2             13                 s           f
3             13                 s           f
4             13                 s           f
5             13                 s           f
6             13                 s           f
7             13                 s           f
8             13                 s           f
9             13                 s           f
10            13                 s           f
11            13                 s           f
12            13                 s           f
13            13                 s           f
14            13                 s           f
15            13                 s           f
16            13                 s           f
17            13                 s           f
18            13                 s           f
19            13                 s           f
20            13                 s           f
21            13                 s           f
22            13                 s           f
23            13                 s           f
24            13                 s           f
25            13                 s           f

我尝试了以下代码,但出现错误:

data <- data$acquisition_time %>% filter(month(Year) %in% c(6,7,8,9))

Error in UseMethod("filter") : 
  no applicable method for 'filter' applied to an object of class "c('POSIXct', 'POSIXt')"

我该怎么做?

【问题讨论】:

假设您已经加载了lubridate 包,我认为您需要使用data %&gt;% filter(month(acquisition_time) %in% c(6, 7, 8, 9)) 过滤您的数据您所做的是尝试将filter 应用于向量。 你完全正确!谢谢它现在可以工作了 @benjamin 你能把你的评论放到答案中,以便 OP 可以接受吗? 【参考方案1】:

您的代码大部分是正确的,但是,您尝试将filter 应用于向量而不是数据框。正确的代码是(假设 lubridate 已加载:

data %>%
  filter(month(acquisition_time) %in% c(6, 7, 8, 9))

【讨论】:

以上是关于过滤某些月份的 POSIXct 日期时间的主要内容,如果未能解决你的问题,请参考以下文章

R中从POSIXct到日期的日期转换

过滤特定月份的日期列

MongoDriver c# 按日期字段中的月份名称过滤

如何按月份和年份输入过滤具有日期时间索引的数据框?熊猫

xts 函数不将我的 POSIXct 日期视为适当的基于时间的对象

xts 函数不将我的 POSIXct 日期视为适当的基于时间的对象