gpt4 book ai didi

r - 将日期时间格式化为 R 中的季节?

转载 作者:行者123 更新时间:2023-12-04 10:17:59 25 4
gpt4 key购买 nike

在 R 中,可以将 POSIXlt 日期时间对象格式化为月份:

format(Sys.time(), format='%Y-%m')

有没有办法对季节或 3 个月的团体(DJF、MAM、JJA、SON)做同样的事情?这些划分在气候学和生态科学中非常普遍,如果能像几个月一样快速地格式化它们,那就太好了。显然 DJF 超过 2 年,但出于目的或这个问题,这并不重要 - 只是一直将它们插入任一年,(或者,理想情况下,能够指定它们进入哪一年会很好) .

我使用输出作为 by() 的索引,所以输出格式并不重要,只要每个年份/季节都是独一无二的。

编辑:示例数据:
dates <- Sys.Date()+seq(1,380, by=35)
dates <- structure(c(16277, 16312, 16347, 16382, 16417, 16452, 16487,
16522, 16557, 16592, 16627), class = "Date")
dates
#[1] "2014-07-26" "2014-08-30" "2014-10-04" "2014-11-08" "2014-12-13"
# "2015-01-17" "2015-02-21" "2015-03-28" "2015-05-02" "2015-06-06" "2015-07-11"

应该导致:
c("2014-JJA", "2014-JJA", "2014-SON", "2014-SON", "2015-DJF", "2015-DJF", 
"2015-DJF", "2015-MAM", "2015-MAM", "2015-JJA", "2015-JJA")

但“2015-DJF”也可能是“2014-DJF”。此外,输出的形式无关紧要 - “2104q4 或 201404 也可以。

最佳答案

as.POSIXlt返回一个命名列表(这使得它不适合 data.frame 列)。列表列可以单独访问,包括“year”(基于 1900,与默认使用的 1970 不同)和“mon”(基于 0)。在 hte 帮助系统中查看此列表的最佳位置是 ?DateTimeClasses :

首先只是一个季节计算,然后是年-季节计算

 c('DJF', 'MAM', 'JJA', 'SON')[ # select from character vector with numeric vector
1+((as.POSIXlt(dates)$mon+1) %/% 3)%%4]

[1] "JJA" "JJA" "SON" "SON" "DJF" "DJF" "DJF" "MAM" "MAM" "JJA"
[11] "JJA"



paste( 1900 + # this is the base year for POSIXlt year numbering
as.POSIXlt( dates )$year +
1*(as.POSIXlt( dates )$year==12) , # offset needed for December
c('DJF', 'MAM', 'JJA', 'SON')[ # indexing from 0-based-mon
1+((as.POSIXlt(dates)$mon+1) %/% 3)%%4]
, sep="-")
[1] "2014-JJA" "2014-JJA" "2014-SON" "2014-SON" "2014-DJF"
[6] "2015-DJF" "2015-DJF" "2015-MAM" "2015-MAM" "2015-JJA"
[11] "2015-JJA"

制作一个构建您期望的格式的函数应该不难。这只是对月份和年份的 POSIXlt 值进行模运算。

关于r - 将日期时间格式化为 R 中的季节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24946955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com