我有以下数据集,并且我希望获得年份中每个(物候学)现象和测站的平均日期(月和日)。看来我可以直接使用均值函数来计算日期格式对象的均值。但是,如果我使用功能as.Date
将月份日期转换为日期,则会添加年份,并且平均日期与年份无关。如何仅根据月份和日期直接计算平均日期?
答案 0 :(得分:0)
您不能计算年份的独立日,因为并非每年都有相同的天数。因此,您需要为计算选择固定的年份。
然后您可以:
答案 1 :(得分:0)
您可以使用yday
包中的lubridate
函数将每个日期转换为该年的每年的日期,然后将每个Pheno的年的平均日期。将一年中的日期转换为一个月和一天取决于您要的日期是in年还是非leap年。我报告两个日期。
代码如下:
library(tidyverse)
library(lubridate)
#
# calculate average day of year
#
average_doy <- df %>% mutate(day_of_year = yday(as.Date(paste(Year,Month,Day, sep="-")))) %>%
group_by(Pheno) %>%
summarize(avg_doy = round(mean(day_of_year,0)))
# set base years
non_leap_year <- 2003
leap_year <- 2004
#
# convert day of year to average day using base years
#
averages <- average_doy %>%
mutate(avg_non_leap_year_mon_day = paste(avg_doy, non_leap_year, sep="_") %>%
as.Date(format = "%j_%Y") %>%
str_remove(paste0(non_leap_year,"-")),
avg_leap_year_mon_day = paste(avg_doy, leap_year, sep="_") %>%
as.Date(format = "%j_%Y") %>%
str_remove(paste0(leap_year,"-") ))
使用您数据的前七行,
# A tibble: 3 x 4
Pheno avg_doy avg_non_leap_year_mon_day avg_leap_year_mon_day
<chr> <dbl> <chr> <chr>
1 Dormant 348 12-14 12-13
2 Tillering 343 12-09 12-08
3 Turning green 48 02-17 02-17