R:从完整日期创建两个日期变量

时间:2015-10-29 19:23:33

标签: r statistics

我的日期记录为:月/日/年或MM / DD / YYYY

我想编写代码,根据该信息创建两个新变量。

  1. 我想一年变量
  2. 我想创建一个四分之一变量 季度变量不受年度影响。我希望这个变量适用于所有年份。
  3. 第1季将是1月1日至3月31日 第2季将是4月1日至6月30日 第3季将是7月1日至9月30日 第4季将是10月1日至12月31日

    非常感谢任何帮助。我似乎无法在R中获得如何执行这些功能的细微差别。

    谢谢,

    贾里德

2 个答案:

答案 0 :(得分:1)

假设date变量属于POSIX**类,您可以这样做:

#example date
date <- as.POSIXlt( "05/12/2015", format='%m/%d/%Y')

为了从data.table已经具有执行此功能的日期返回年份,这是year

library(data.table)
> year(date)
[1] 2015

至于季度,可以从下面的函数轻松创建它(使用返回一个月的data.table::month):

quarter <- function(x) {
  rep(c('quarter 1','quarter 2','quarter 3','quarter 4'), each=3)[month(x)]
} 

> quarter(date)
[1] "quarter 2"

答案 1 :(得分:0)

仅使用基础包:

尝试使用strptime fxn格式化日期,以便所有日期现在都是年 - 月 - 日格式。此格式将日期的每个元素约束为相同的字符长度并位于相同的位置。查看strptime文档以获取适当的格式化参数。

date.vec<-c(1/1/1999,2/2/1999)
fmt.date.vec<-strptime(date.vec, "%m/%d/%Y")

使用此格式的日期,可以使用子字符串函数轻松提取年,月和日

Year<-substring(fmt.date.vec,1,4)
Month<-substring(fmt.date.vec,6,7)
Day<-substring(fmt.date.vec,9,10)

使用此信息,您现在可以通过多种方式生成Quarter矢量。例如,如果data.frame“df”具有Month列:

df$Quarter<-"Quarter_1"
df[df$Month %in% c("04","05","06"),]$Quarter<-"Quarter_2"
df[df$Month %in% c("07","08","09"),]$Quarter<-"Quarter_3"
df[df$Month %in% c("10","11","12"),]$Quarter<-"Quarter_4"