Datetime 在R中提取日期

Datetime 在R中提取日期,datetime,r,Datetime,R,我在R中很难处理日期,并且可以在SPSS中很容易地完成这项工作,但我很愿意在R中完成我的项目 我的数据框中有一个日期列,希望完全删除年份,以便保留月份和日期。这是我原始数据的峰值 > head(ds$date) [1] "2003-10-09" "2003-10-11" "2003-10-13" "2003-10-15" "2003-10-18" "2003-10-20" > class((ds$date)) [1] "Date" 我“希望”是这样 > head(ds$dat

我在R中很难处理日期,并且可以在SPSS中很容易地完成这项工作,但我很愿意在R中完成我的项目

我的数据框中有一个日期列,希望完全删除年份,以便保留月份和日期。这是我原始数据的峰值

> head(ds$date)
[1] "2003-10-09" "2003-10-11" "2003-10-13" "2003-10-15" "2003-10-18" "2003-10-20"
> class((ds$date))
[1] "Date"
我“希望”是这样

> head(ds$date)
[1] "10-09" "10-11" "10-13" "10-15" "10-18" "10-20"
> class((ds$date))
[1] "Date"
如果可能的话,我想把第一天定在10月1日而不是1月1日

如果您能提供任何帮助,我们将不胜感激


编辑:我觉得我应该添加一些上下文。我想画一个NHL球员在10月开始到4月结束的赛季中的表现。为了补充这一点,我想按每个季节划分图面,这是我的数据框架中的一个单独的列。因为我想比较整个赛季的累积表现,我认为我需要去掉全年的部分,但也许我不需要;正如我所指出的,我很难确定R中的日期。我希望完成的是一个按季节比较相对日期的累积绩效的绘图,x轴从10月开始,到4月结束

您必须记住日期是一种数字格式,表示从内部日期计数的“原点”起经过的天数:

> d = as.Date("2003-10-09", format="%Y-%m-%d")
> format(d, "%m-%d")
[1] "10-09"
> str(Date)
Class 'Date'  num [1:10] 14245 14360 14475 14590 14705 ...
如果您想要引用,这与EXCEL中的相同。因此,格式为的解决方案是完全有效的

现在,如果您想将一年的第一个日期设置为10月1日,您可以像这样构造一些年份索引:

redefine.year <- function(x,start="10-1"){
  year <- as.numeric(strftime(x,"%Y"))
  yearstart <- as.Date(paste(year,start,sep="-"))

  year + (x >= yearstart) - min(year) + 1
}

这就是你要找的吗

library(ggplot2)
## make up data for two seasons a and b
a = as.Date("2010/10/1")
b = as.Date("2011/10/1")
a.date <- seq(a, by='1 week', length=28)
b.date <- seq(b, by='1 week', length=28)

## make up some score data  
a.score <- abs(trunc(rnorm(28, mean = 10, sd = 5)))
b.score <- abs(trunc(rnorm(28, mean = 10, sd = 5)))

## create a data frame   
df <- data.frame(a.date, b.date, a.score, b.score)
df

## Since I am using ggplot I better create a "long formated" data frame
df.molt <- melt(df, measure.vars = c("a.score", "b.score"))
levels(df.molt$variable) <- c("First season", "Second season")
df.molt
如果您想修改x轴(例如,显示格式),那么您可能会感兴趣


谢谢,但这会将其存储为一个字符。我可以把结果放回日期表单吗?@Btibert3:您应该区分
date
变量包含的内容以及它的显示方式。如果你想隐藏年份以便于显示,上面的代码可以完成这项工作,但日期本身保持不变。答案很好。R中有许多灵活的日期格式选项,用于以各种方式提取和显示日期组件。请参阅格式帮助。在user678105的回答注释中,您询问“mm yy”是否可以保留为“日期”值。你是在计算值本身还是为了显示?几乎!我唯一需要的是图表的左边应该从十月开始,因为那是赛季开始的时候。换言之,从左到右读取时,轴的范围应为10月到4月。这正是我被挂断的部分。谢谢你的帮助!
         Date year
1  2009-01-01    1
2  2009-04-25    1
3  2009-08-18    1
4  2009-12-11    2
5  2010-04-05    2
6  2010-07-29    2
7  2010-11-21    3
8  2011-03-16    3
9  2011-07-09    3
10 2011-11-01    4
library(ggplot2)
## make up data for two seasons a and b
a = as.Date("2010/10/1")
b = as.Date("2011/10/1")
a.date <- seq(a, by='1 week', length=28)
b.date <- seq(b, by='1 week', length=28)

## make up some score data  
a.score <- abs(trunc(rnorm(28, mean = 10, sd = 5)))
b.score <- abs(trunc(rnorm(28, mean = 10, sd = 5)))

## create a data frame   
df <- data.frame(a.date, b.date, a.score, b.score)
df

## Since I am using ggplot I better create a "long formated" data frame
df.molt <- melt(df, measure.vars = c("a.score", "b.score"))
levels(df.molt$variable) <- c("First season", "Second season")
df.molt
## plot it
ggplot(aes(y = value, x = a.date), data = df.molt) + geom_point() +   
geom_line() + facet_wrap(~variable, ncol = 1) + 
scale_x_date("Date", format = "%m-%d")