我有一年一年和一年的df作为列:
dat <- data.frame(year = rep(1980:2015, each = 365), day = rep(1:365,times = 36))
请注意,即使是闰年,我也假设一年365天。我需要生成两件事:
1个月 2)日期我这样做了:
# this tells me how many days in each month
months <- list(1:31, 32:59, 60:90, 91:120, 121:151, 152:181, 182:212, 213:243, 244:273, 274:304, 305:334, 335:365)
library(dplyr)
# this assigns each day to a month
dat1 <- dat %>% mutate(month = sapply(day, function(x) which(sapply(months, function(y) x %in% y))))
我想生成第三列,其格式为year,month,day
。
但是,由于我假设所有年份都是非闰年,我需要确保我的日期也反映出来,即2月29日应该没有日期。
我需要生成日期的原因是因为我想生成数字 一年15天的时间。一年将有24个15天的期限
1st Jan - 15th Jan: 1 period
16th Jan- 31st Jan: 2 period
1st Feb - 15th Feb: 3 period....
16th till 31st dec: 24th period)
我需要日期来指定一个月中的某一天是否属于第一天 一半(即日<= 15)或第二季(日> 15)。我使用以下内容 脚本来做到这一点:
dat2 <- dat1 %>% mutate(twowk = month*2 - (as.numeric(format(date,"%d")) <= 15))
为了让我运行上面的这一行,我需要生成date
,因此我的问题。
答案 0 :(得分:3)
可能的解决方案:
dat$dates <- as.Date(paste0(dat$year,'-',
format(strptime(paste0('1981-',dat$day), '%Y-%j'),
'%m-%d'))
)
这是做什么的:
strptime(paste0('1981-',dat$day), '%Y-%j')
,您可以获得非闰年的日期。format
与'%m-%d'
嵌入paste
,您可以提取当月的月份和日期。year
与as.Date
- 列中的年份一起,并将其包含在(\d ?){17}
中以获得非闰年日期。