R:将月份指定为一年中的某一天

R:将月份指定为一年中的某一天,r,dplyr,as.date,R,Dplyr,As.date,这是我的数据,其中一列是10年,第二列是另一年的365天 dat <- data.frame(year = rep(1980:1989, each = 365), doy= rep(1:365, times = 10)) 但是,这种解决方案是错误的,因为它将错误的月份指定给了天数。我正在寻找一个dplyr 可能的解决方案。我们可以使用适当的格式(即%Y%j)将其转换为datetime类,然后使用格式提取月份 dat$month <- with(dat, format(strptim

这是我的数据,其中一列是10年,第二列是另一年的365天

dat <- data.frame(year = rep(1980:1989, each = 365), doy= rep(1:365, times = 10))
但是,这种解决方案是错误的,因为它将错误的月份指定给了天数。我正在寻找一个
dplyr

可能的解决方案。

我们可以使用适当的
格式(即
%Y%j
)将其转换为datetime类,然后使用
格式提取
月份

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

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

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

为什么最后是
+1
?@KS89,因为
strtime
月从0开始
dat$month <- with(dat, strptime(paste(year, doy), format = "%Y %j")$mon + 1)
tail(dat$month)
#[1] 12 12 12 12 12 12
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