簡體   English   中英

使用R比較日期

[英]Using R to Compare Dates

我有兩個csv文件。

一個文件列出了員工離職的時間和原因。

EmployeeID,Department,Separation_Type,Separation_Date,FYFQ    
119549,Sales,Retirement,09/30/2013  
2629053,Sales,Termination,09/30/2013  
120395,Sales,Retirement,11/01/2013  
122450,Sales,Transfer,11/30/2013  
123962,Sales,Transfer,11/30/2013  
1041054,Sales,Resignation,12/01/2013  
990962,Sales,Retirement,12/14/2013  
135396,Sales,Retirement,01/11/2014  

另一個文件是查找表,顯示每個會計季度的開始和結束日期:

FYFQ,Start,End  
FY2014FQ1,10/1/2013,12/31/2013   
FY2014FQ2,1/1/2014,3/31/2014  
FY2014FQ3,4/1/2014,6/30/2014  
FY2014FQ4,7/1/2014,9/30/2014  
FY2015FQ1,10/1/2014,12/31/2014  
FY2015FQ2,1/1/2015,3/31/2015  

我希望R查找Separation_Date發生在什么FYFQ中,並將其打印到數據的第四列中。

輸入:

Separations.csv:   
>EmployeeID,Department,Separation_Type,Separation_Date,FYFQ       
>990962,Sales,Retirement,12/14/2013  
>135396,Sales,Retirement,01/11/2014         

FiscalQuarterDates.csv:

>FYFQ,Start,End  
>FY2013FQ4,7/1/2013,9/30/2013   
>FY2014FQ1,10/1/2013,12/31/2013  
>FY2014FQ2,1/1/2014,3/31/2014

所需輸出:
Output.csv:

>EmployeeID,Department,Separation_Type,Separation_Date,FYFQ      
>990962,Sales,Retirement,12/14/2013,FY2014FQ1
>135396,Sales,Retirement,01/11/2014,FY2014FQ2     

我假設有一些函數將遍歷FiscalQuarterDates.csv並評估每個分離日期是否在FYFQ中,但是我不確定。

關於最佳方法的任何想法?

這是有效的。

#read in csv and declare th3 4th column a date
separations <- read.csv(file="Separations_DummyData.csv", head=TRUE,sep=",",colClasses=c(NA,NA,NA,"Date"))


#Use the zoo package (I installed it) to convert separation_date to quarter type and then set the quarter back by 1/4. Then construct the variable with FYyFQq. 
library(zoo)
separations$FYFQ <- format(as.yearqtr(separations$Separation_Date, "%m/%d/%Y") + 1/4, "FY%YFQ%q")

#Write out this to CSV in working directory.
write.csv(separations, file = "sepscomplete.csv", row.names = FALSE)

您確實不需要第二個數據框:一個簡單的函數將解決此問題:

yr<-with(firstdf,as.numeric(substr(Seperation_Date,7,10)))
mth<-with(firstdf,as.numeric(substr(Seperation_Date,1,2)))


    firstdf$FYFQ<-with(firstdf,
ifelse(mth<=3,paste0("FY",yr,"FQ2"),
ifelse(mth>3 & mth<=6,paste0("FY",yr,"FQ3"),
ifelse(mth>7 & mth<=9,paste0("FY",yr,"FQ4"),
paste0("FY",yr+1,"FQ1")
))))

將每個日期轉換為"yearqtr"類(來自Zoo包),然后加1/4將其轉換到下一個日歷季度。 然后使用write.csv將其write.csv

library(zoo)
DF$FYFQ <- format(as.yearqtr(DF$Separation_Date, "%m/%d/%Y") + 1/4, "FY%YFQ%q")

贈送:

> write.csv(DF, file = stdout(), row.names = FALSE)
"EmployeeID","Department","Separation_Type","Separation_Date","FYFQ"
990962,"Sales","Retirement","12/14/2013","FY2014FQ1"
135396,"Sales","Retirement","01/11/2014","FY2014FQ2"

注意:

1)如果FYFQ不必完全采用所示格式,則可以簡化為:

DF$FYFQ <- as.yearqtr(DF$Separation_Date, "%m/%d/%Y") + 1/4

2)不使用問題中列出的第二個輸入文件。

3)我們將其用於輸入數據:

Lines <- "EmployeeID,Department,Separation_Type,Separation_Date,FYFQ  
990962,Sales,Retirement,12/14/2013
135396,Sales,Retirement,01/11/2014"

DF <- read.csv(text = Lines)

4)固定,使它產生偏移的日歷季度。

該答案的文本只是另一個答案的副本,因此已移至該問題。

暫無
暫無

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

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