操纵R中的日历

时间:2015-09-25 15:29:29

标签: r

我有一个输入表,看起来像:

dataframe[,'Date']:
Field
'20-Jun'
'25-Jun'
'28-Jun'
'30-Jun'

我想知道自今年年初以来每天的天数。

目前我通过执行以下操作来部分解决此问题(仅针对第一个元素):

this_year<-'2015'
calmap<-data.frame(c('Jan','Feb'....),c(1:12))
colnames(colmap)<-... #a little bit of tidy up
tmp.val<-as.character(dataframe[,'Date'])
splitcal<-strsplit(tmp.val,'-')
month.val<-calmap[calmap$Month==splitcal[[1]][2],'Month_Num']
first.date<-as.Date(paste(paste(this_year,month.val,sep='-'),splitcal[[1]][1],sep='-'))
first.jan<-as.Date(paste(format(first.date,'%Y'),'-01-01',sep=''))

但是,这仅解决了dataframe[,'Date']对象的第一个元素,我尝试对其进行概括(通过转换[[1]]->[[]])不起作用。

请给我一个小费吗?我现在正在努力的道路可能完全错误。

tl; dr我有一个dataframe[,'Date']对象,其中包含Jun-20等值,并希望将这些值转换为相对于01/01/thisyear的天数。

2 个答案:

答案 0 :(得分:2)

怎么样?
Sys.setlocale("LC_TIME", "english")
dataframe <- data.frame(Date = c('Jun-20', 'Jun-25', 'Jun-28', 'Jun-30'))
dates <- as.Date(paste(dataframe[, "Date"], format(Sys.Date(), "%Y")), format = "%b-%d %Y")
as.numeric(format(dates, "%j"))
# [1] 171 176 179 181

答案 1 :(得分:2)

base

difftime(as.Date(dataframe[,'Date'], format = "%d-%b"), as.Date("2015-01-01"))

应该这样做。

如果没有另行说明,则假定日期为当前年份。