簡體   English   中英

在R中按期間將日期分組

[英]Grouping dates by Periods in R

我有一張桌子:

   Date     Value1   Value2   ...
09/01/2008        
10/01/2008
11/01/2008
12/01/2008
01/01/2009
02/01/2009
03/01/2008
04/01/2009
05/01/2009
06/01/2009
07/01/2009
08/01/2008

我需要以另一種方式對日期進行分組:09/01/2008 10/01/2008 11/01/2008等於“ 2008”,其余日期等於“ 2008.2009”

是否可以做這樣的事情:

Date[Date>=09/01/2008 & Date<=11/01/2008] <- 2008
Date[Date>=12/01/2008 & Date<=08/01/2009] <- 2008.2009

輸出應采用以下格式:

Date        Value1   Value2  ...
2008        
2008
2008
2008.2009
2008.2009
2008.2009
2008.2009
2008.2009
2008.2009
2008.2009
2008.2009
2008.2009

謝謝!

dat <-read.table(text="Date  
09/01/2008        
10/01/2008
11/01/2008
12/01/2008
01/01/2009
02/01/2009
03/01/2009
04/01/2009
05/01/2009
06/01/2009
07/01/2009
08/01/2009",head=T)

dat$dt <- with( dat, as.Date(Date,format="%m/%d/%Y"))

with(dat, c("2008", "2008.2009", "NA")[ findInterval( dt,
                                            c( as.Date("2008/09/01") , 
                                               as.Date("2008/11/02") , 
                                               as.Date("2009/08/02") )
                                                    )
                                       ] )

# [1] "2008"      "2008"      "2008"      "2008.2009" "2008.2009" "2008.2009"
# [7] "2008.2009" "2008.2009" "2008.2009" "2008.2009" "2008.2009" "2008.2009"

您需要將某些日期提前1天,以便findInterval可以遵守您對“> =”和“ <=”的不規則使用。

如果數據集中的日期范圍僅從2008/09/01到2009/08/01,並且僅需要2年組,則可以嘗試使用data.table在下面進行data.table

# Use @BondedDust toy data
library(data.table)
setDT(dat)  # convert to data table
dat[, new_col := ifelse(dt %between% c("2008-09-01", "2008-11-01"),
                        "2008", "2008.2009")]
dat

# you get
          Date         dt   new_col
 1: 09/01/2008 2008-09-01      2008
 2: 10/01/2008 2008-10-01      2008
 3: 11/01/2008 2008-11-01      2008
 4: 12/01/2008 2008-12-01 2008.2009
 5: 01/01/2009 2009-01-01 2008.2009
 6: 02/01/2009 2009-02-01 2008.2009
 7: 03/01/2009 2009-03-01 2008.2009
 8: 04/01/2009 2009-04-01 2008.2009
 9: 05/01/2009 2009-05-01 2008.2009
10: 06/01/2009 2009-06-01 2008.2009
11: 07/01/2009 2009-07-01 2008.2009
12: 08/01/2009 2009-08-01 2008.2009

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM