如何用R语言lubridate包计算满月日期并标记到自定义日历
如何在R日历数据中标记满月日期
要准确标记日历中的满月日期,不要用固定的28.5天周期——实际月球的朔望月平均周期是29.53059天,且存在微小波动,固定周期会导致长期偏差越来越大。推荐使用专门的天文计算包来获取精准的月相数据,以下是具体实现步骤:
- 安装并加载
lunar包(该包提供专业的月相计算功能):
install.packages("lunar") library(lunar)
- 在你的日历数据中新增
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




