R:分配一年中的几个月

时间:2018-02-05 11:12:42

标签: r dplyr as.date

这是我的数据,在一栏中有10年,第二栏有另一年365天

dat <- data.frame(year = rep(1980:1989, each = 365), doy= rep(1:365, times = 10))

我假设所有年份都是非闰年,即他们有365天。

我想创建另一个列month,它基本上属于当年所属的月份。

library(dplyr)

dat %>% 
   mutate(month = as.integer(ceiling(day/31)))

然而,这个解决方案是错误的,因为它分配错误的几个月到几天。我正在寻找dplyr 解决方案可能。

2 个答案:

答案 0 :(得分:1)

我们可以使用相应的format(即%Y %j)将其转换为datetime类,然后使用month

提取format
dat$month <- with(dat, format(strptime(paste(year, doy), format = "%Y %j"), '%m'))

或使用$mon提取月份并添加1

dat$month <- with(dat, strptime(paste(year, doy), format = "%Y %j")$mon + 1)
tail(dat$month)
#[1] 12 12 12 12 12 12

答案 1 :(得分:1)

这应该为您提供月份的整数值:

dat$month.num <- month(as.Date(paste(dat$year, dat$doy), '%Y %j'))

如果您想要月份名称:

dat$month.names <- month.name[month(as.Date(paste(dat$year, dat$doy), '%Y %j'))]

结果(仅显示几行):

> dat[29:33,]
   year doy month.num month.names
29 1980  29         1     January
30 1980  30         1     January
31 1980  31         1     January
32 1980  32         2    February
33 1980  33         2    February