我在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月结束。答案 0 :(得分:8)
> d = as.Date("2003-10-09", format="%Y-%m-%d")
> format(d, "%m-%d")
[1] "10-09"
答案 1 :(得分:2)
您必须记住日期是一种数字格式,表示自内部日期计数“原点”以来经过的天数:
> 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
}
测试代码:
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))
给出
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 :(得分:2)
这是你在找什么?
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
绘制数据:
## 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感兴趣。