按两个时间序列过滤数据框

时间:2017-06-12 18:57:16

标签: r dataframe time

您好我是R的新手,想知道是否有一种简单的方法来过滤多个日期的数据。 我有一个数据,其日期为07.03.2003至2016年12月31日。 我需要按多个时间序列拆分/过滤数据,如下所示。

日期需要新数据框: 07.03.2003至06/03/2005 2013年1月1日至2016年12月31日

,新数据框应包括2005年3月7日至2012年12月31日的日期

2 个答案:

答案 0 :(得分:0)

让我们采用以下带有日期的data.frame:

df <- data.frame( date = c(ymd("2017-02-02"),ymd("2016-02-02"),ymd("2014-02-01"),ymd("2012-01-01")))

        date
1 2017-02-02
2 2016-02-02
3 2014-02-01
4 2012-01-01

我可以使用lubridate::ymddplyr::between以及dplyr::between对一系列日期进行过滤:

df1 <- filter(df, between(date, ymd("2017-01-01"), ymd("2017-03-01")))

        date
1 2017-02-02

或者:

df2 <- filter(df, between(date, ymd("2013-01-01"), ymd("2014-04-01")))

        date
1 2014-02-01

答案 1 :(得分:0)

我会选择ptr: 0x7fff5fbff767; in decmial format: 140734799804263 ptr: 0x7fff5fbff768; in decmial format: 140734799804264 ptr: 0x7fff5fbff769; in decmial format: 140734799804265 ptr: 0x7fff5fbff76a; in decmial format: 140734799804266 ptr: 0x7fff5fbff76b; in decmial format: 140734799804267 。特别是

lubridate

创建包含两列(日期和数字)的数据表:

library(data.table)   
library(lubridate)

set.seed(555)#in order to be reproducible
N <- 1000#number of pseudonumbers to be generated

date1<-dmy("07-03-2003")
date2<-dmy("06-03-2005")
date3<-dmy("01-01-2013")
date4<-dmy("31-12-2016")

让我们进行一些削减:

my_dt<-data.table(date_sample=c(sample(seq(date1, date4, by="day"), N),numeric_sample=sample(N,replace = F)))

> head(my_dt)
     date_sample   numeric_sample
1:  2007-04-11              2
2:  2006-04-20             71
3:  2007-12-20             46
4:  2016-05-23             78
5:  2011-10-07              5
6:  2003-09-10             47

因此:

forbidden_dates<-interval(date2+1,date3-1)#create interval that dates should not fall in.

> forbidden_dates
[1] 2005-03-07 UTC--2012-12-31 UTC
test_date1<-dmy("08-03-2003")#should not fall in above range
test_date2<-dmy("08-03-2005")#should fall in above range

可视化切割的好方法:

test_date1 %within% forbidden_dates
[1] FALSE
test_date2 %within% forbidden_dates
[1] TRUE

enter image description here

>plot(my_dt)

之后

my_dt<-my_dt[!(date_sample %within% forbidden_dates)]#applying the temporal cut

enter image description here