我有渔业数据集(sample data set)。我要研究卫星对捕鱼的影响。我用月球包找到了每个钓鱼日的月相。
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
lunar 包可用于将月相分为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
答案 0 :(得分:0)
我不知道计算&#34;农历日&#34;从约会。从理论上讲,您可以从数据集中确定相位的最大值和最小值,然后将相位转换为百分比,并以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()
现在,假设您的数据集有一个名为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")
答案 1 :(得分:0)
从新月到满月的第二天,反之,月相增加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,wax-1,wax-2,....,full,wane-1,wane-2,....,new}。