gpt4 book ai didi

r - 生成两年内每月最后一天的序列

转载 作者:行者123 更新时间:2023-12-03 07:36:35 24 4
gpt4 key购买 nike

我使用 lubridate 并认为这会很容易

ymd("2010-01-31")+months(0:23)

但是看看会得到什么。一切都乱了!

 [1] "2010-01-31 UTC" "2010-03-03 UTC" "2010-03-31 UTC" "2010-05-01 UTC" "2010-05-31 UTC" "2010-07-01 UTC" "2010-07-31 UTC" "2010-08-31 UTC" "2010-10-01 UTC"
[10] "2010-10-31 UTC" "2010-12-01 UTC" "2010-12-31 UTC" "2011-01-31 UTC" "2011-03-03 UTC" "2011-03-31 UTC" "2011-05-01 UTC" "2011-05-31 UTC" "2011-07-01 UTC"
[19] "2011-07-31 UTC" "2011-08-31 UTC" "2011-10-01 UTC" "2011-10-31 UTC" "2011-12-01 UTC" "2011-12-31 UTC"

然后我阅读了 lubridate 如何迎合间隔、持续时间和周期等现象。所以,好吧,我意识到一个月实际上是由 (365*4+1)/48 = 30.438 天定义的天数。所以我尝试变得聪明并将其重写为

ymd("2010-01-31")+ as.period(months(0:23))

但这只是给出了一个错误。

Error in as.period.default(months(0:23)) : 
(list) object cannot be coerced to type 'double'

最佳答案

是的,您找到了正确的技巧:从下个月的第一天回溯一天。

这是基本 R 中的一行:

R> seq(as.Date("2010-02-01"), length=24, by="1 month") - 1
[1] "2010-01-31" "2010-02-28" "2010-03-31" "2010-04-30" "2010-05-31"
[6] "2010-06-30" "2010-07-31" "2010-08-31" "2010-09-30" "2010-10-31"
[11] "2010-11-30" "2010-12-31" "2011-01-31" "2011-02-28" "2011-03-31"
[16] "2011-04-30" "2011-05-31" "2011-06-30" "2011-07-31" "2011-08-31"
[21] "2011-09-30" "2011-10-31" "2011-11-30" "2011-12-31"
R>

所以不需要lubridate像这样的简单任务不需要它(虽然是一个很好的包)。另外,它对现有基本函数的重载仍然让我觉得有些危险......

关于r - 生成两年内每月最后一天的序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8333838/

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