我有渔业数据集( 样本数据集)。我要研究月亮对鱼的影响。我用月球包裹来找出每个捕鱼日的月相。
library(lunar)
data$lunar_phase <- lunar.phase(as.Date(data$fdate))产出如下
fdate lunar_phase
29/3/2006 3.51789248
28/3/2006 1.255536876
24/3/2006 4.559716361
26/3/2006 2.801242263
25/3/2006 0.538886659月球包可用于将月相划分为4或8个周期。
我需要将捕鱼日期转换为相对的月球周期日期。月球周期为29.53天。如果农历日0=满月,那么就找出其他日期的农历循环日期。
有什么办法可以做到吗?
预期产出如下
fdate lunar_day
29/3/2006 6
28/3/2006 4
24/3/2006 10
26/3/2006 5
25/3/2006 1发布于 2018-03-06 21:43:24
我不知道有什么包裹能从一个日期算出“阴历日”。理论上,您可以通过确定阶段的最大值和最小值,然后将阶段转换为百分比并按29.53的比例舍入。
然而,lunar包也计算光照(作为可见表面的一小部分)。我认为这是一个很好的代表阴历日,也给你一个物理价值,而不是更武断的东西。
使用你的数据,很明显新月发生在一个月开始的时候:
library(tidyverse)
library(lunar)
sample_data <- read_csv("sample_data.csv")
sample_data %>%
mutate(Date = as.Date(fdate, "%d/%m/%Y"),
illum = lunar.illumination.mean(Date)) %>%
ggplot(aes(Date, illum)) + geom_point()

我们还可以填写缺失的日期,这使得月球周期变得明显起来:
all_dates <- data.frame(Date = seq.Date(min(as.Date(sample_data$fdate, "%d/%m/%Y")),
max(as.Date(sample_data$fdate, "%d/%m/%Y")),
by = "1 day")) %>%
mutate(illum = lunar.illumination.mean(Date))
all_dates %>%
ggplot(aes(Date, illum)) + geom_point()

现在,假设dataset有一个名为catch的列,我们可以开始分析,方法是将捕获数据与整个日期范围连接起来,然后绘制catch和月球照度。此数据集也可用于回归、相关性等。
# simulated catch data
set.seed(123)
sample_data <- sample_data %>%
mutate(catch = rnorm(16, 100, 30))
all_dates %>%
left_join(mutate(sample_data, Date = as.Date(fdate, "%d/%m/%Y"))) %>%
select(Date, illum, catch) %>%
gather(variable, value, -Date) %>%
ggplot(aes(Date, value)) +
geom_point() +
facet_grid(variable~., scales = "free_y")

发布于 2020-07-28 10:34:49
从新月到满月的每一天,反之亦然,月相增加了0.212769。因此,当您运行下面的代码,您得到一个接近的阴历日:
library(lunar)
lunar_day <- lunar.phase(as.Date("2020-07-21")) /(0.212769)
round(lunar_day, 0)这工作正常,大约29天,从新月开始。下面给出了一个tidyverse代码:
library(lunar)
library(tidyverse)
new_data <-
data %>%
mutate(lunar_day = lunar.phase(as.Date(fdate)) / 0.212769) %>%
mutate_if(is.numeric(lunar_day),round, 0) 第14天后,是从满月到新月的循环。可以编写一个函数,其中循环可以表示为{new,蜡-1,蜡-2,.,满的,衰减-1,衰减-2,.,新}。
https://stackoverflow.com/questions/49123679
复制相似问题