You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用R语言lubridate包计算满月日期并标记到自定义日历

如何在R日历数据中标记满月日期

要准确标记日历中的满月日期,不要用固定的28.5天周期——实际月球的朔望月平均周期是29.53059天,且存在微小波动,固定周期会导致长期偏差越来越大。推荐使用专门的天文计算包来获取精准的月相数据,以下是具体实现步骤:

  1. 安装并加载lunar包(该包提供专业的月相计算功能):
install.packages("lunar")
library(lunar)
  1. 在你的日历数据中新增fullmoon字段:
library(tibble)
library(dplyr)
library(lubridate)

mycal <- tibble(datum = seq(as.Date("2020/01/01"), as.Date("2025/12/31"), "days"))

mycal <- mycal %>%
  mutate(
    # 计算月相分数:0=新月,0.5=上弦月,1=满月
    moon_phase = lunar.phase(datum, phase = "frac"),
    # 用阈值判断是否为满月(允许微小误差,因为满月时刻可能在一天内任意时间)
    fullmoon = abs(moon_phase - 1) < 0.01
  )

说明

  • lunar.phase()函数会根据日期计算精确的月相状态,返回0到1之间的数值,1对应满月时刻。
  • 设置abs(moon_phase - 1) < 0.01是为了覆盖满月时刻不在当天0点的情况,你可以根据需要调整阈值(比如改为0.005来更严格地筛选满月当天)。

内容的提问来源于stack exchange,提问作者Patrick

火山引擎 最新活动