如何在R中将日期转换为农历日期?

问题描述 投票:0回答:1

我有渔业数据集(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

月球包可用于将月相分为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
r date
1个回答
0
投票

我不知道从日期开始计算“阴历日”的包裹。从理论上讲,您可以通过确定阶段的最大值和最小值,然后将阶段转换为百分比并以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()

enter image description here

我们还可以填写缺失的日期,这使得月球周期显而易见:

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()

enter image description here

现在,假设您的数据集有一个名为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")

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.