首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提取R中的日期

提取R中的日期
EN

Stack Overflow用户
提问于 2011-03-31 08:56:12
回答 3查看 11.2K关注 0票数 4

我很难处理R中的日期,在SPSS中可以很容易地做到这一点,但我喜欢为我的项目留在R中。

我在我的数据框中有一个日期列,并且想要完全删除年份,以便离开月份和日期。这是我原始数据的峰值。

代码语言:javascript
复制
> 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"

我“希望”它是。

代码语言:javascript
复制
> 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月份结束。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-01 01:02:39

这就是你要找的东西吗?

代码语言:javascript
复制
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

然后,我使用ggplot2绘制数据:

代码语言:javascript
复制
## 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")

如果您想修改x轴(例如,显示格式),那么您可能会对scale_date感兴趣。

票数 2
EN

Stack Overflow用户

发布于 2011-03-31 09:54:08

代码语言:javascript
复制
> d = as.Date("2003-10-09", format="%Y-%m-%d")
> format(d, "%m-%d")
[1] "10-09"
票数 8
EN

Stack Overflow用户

发布于 2011-03-31 19:55:07

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

代码语言:javascript
复制
> str(Date)
Class 'Date'  num [1:10] 14245 14360 14475 14590 14705 ...

如果你需要参考,这和在EXCEL中是一样的。因此,使用格式的解决方案是完全有效的。

现在,如果您想将一年的第一个日期设置为10月1日,您可以构建一些年份索引,如下所示:

代码语言:javascript
复制
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
}

测试代码:

代码语言:javascript
复制
Start <- as.Date("2009-1-1")    
Stop <- as.Date("2011-11-1")
Date <- seq(Start,Stop,length.out=10)

data.frame( Date=as.character(Date),
            year=redefine.year(Date))

给出

代码语言:javascript
复制
         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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5494216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档