过滤R中的timedate列

时间:2017-01-19 05:49:19

标签: r

我是R的初学者,我在R中遇到了一个时间列。 我有一个有多列的数据,其中一列有日期和时间,如

Originaltime               magnitude     depth
2017-01-10T16:42:23.247Z   4.6            18.8
1963-09-02T23:16:55.510Z   3.767          12
1963-08-29T16:46:25.520Z   3.727          12

我想使用originaltime列过滤我的数据,但我的过滤器仅使用年份。

我试过了:

b <- year(historiceventstbl$origintime)
head(b)
#[1] 2017 2017 2017 2017 2017 2017

我不确定,怎么离开这里。

2 个答案:

答案 0 :(得分:1)

我们可以使用filter

中的dplyr
library(dplyr)
library(lubridate)
df1 %>% 
      filter(year(Originaltime)==1963)
#                Originaltime magnitude depth
#1 1963-09-02T23:16:55.510Z     3.767    12
#2 1963-08-29T16:46:25.520Z     3.727    12

或使用subset

中的base R
subset(df1, year(Originaltime)==1963)

或仅使用base R

subset(df1, sub("^(.{4}).*", "\\1", Originaltime)==1963)
#              Originaltime magnitude depth
#2 1963-09-02T23:16:55.510Z     3.767    12
#3 1963-08-29T16:46:25.520Z     3.727    12

在操作时间时使用日期时间功能可能更好,所以

subset(df1, format(as.POSIXct(Originaltime, format = "%Y-%m-%dT%H:%M:%OS"), "%Y") == 1963)
#             Originaltime magnitude depth
#2 1963-09-02T23:16:55.510Z     3.767    12
#3 1963-08-29T16:46:25.520Z     3.727    12

答案 1 :(得分:0)

您也可以仅使用base R对数据进行尝试:

df[substring(as.character(df$Originaltime), 1, 4) == 2017,]
#              Originaltime magnitude depth
#1 2017-01-10T16:42:23.247Z       4.6  18.8