nau*_*101 7 datetime r datetime-format
在R中,可以将POSIXlt日期时间对象格式化为一个月:
format(Sys.time(), format='%Y-%m')
Run Code Online (Sandbox Code Playgroud)
有没有办法在季节或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"
Run Code Online (Sandbox Code Playgroud)
应该导致:
c("2014-JJA", "2014-JJA", "2014-SON", "2014-SON", "2015-DJF", "2015-DJF",
"2015-DJF", "2015-MAM", "2015-MAM", "2015-JJA", "2015-JJA")
Run Code Online (Sandbox Code Playgroud)
但"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"
Run Code Online (Sandbox Code Playgroud)
构建您期望的格式的函数不应该那么困难.这只是月份和年份POSIXlt值的模运算.
| 归档时间: |
|
| 查看次数: |
2185 次 |
| 最近记录: |