首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R日气象周转换为标准气象周

R日气象周转换为标准气象周
EN

Stack Overflow用户
提问于 2020-05-04 12:28:26
回答 2查看 170关注 0票数 1

在使用xtszoolubridate包将每日数据转换为每周数据时,我看到了许多问题。没有一个答案适合我的问题。我尝试了以下代码

代码语言:javascript
复制
library(zoo)
library(lubridate)
library(xts)
library(tidyverse)

#Calculation for multistation
set.seed(123)
df <- data.frame("date"= seq(from = as.Date("1970-1-1"), to = as.Date("2000-12-31"), by = "day"),
                 "Station1" = runif(length(seq.Date(as.Date("1970-1-1"), as.Date("2000-12-31"), "days")), 10, 30),
                 "Station2" = runif(length(seq.Date(as.Date("1970-1-1"), as.Date("2000-12-31"), "days")), 11, 29),
                 "Station3" = runif(length(seq.Date(as.Date("1970-1-1"), as.Date("2000-12-31"), "days")), 9, 28))

head(df)

# Aggregate over week
df %>% 
  mutate(Week = week(ymd(date)),
         Year = year(ymd(date))) %>% 
  pivot_longer(-c(Week, date, Year), values_to = "value", names_to = "Station") %>% 
  group_by(Year, Week, Station) %>% 
  summarise(Weekly = mean(value)) %>% 
  arrange(Station) %>% 
  print(n = 55)

从产出中你可以看到,1970年有53周,我不想要。我想从每年的第一天开始,第52周应该在非闰年有8天,如果是闰年,第9周和第52周应该有8天,所以每年只有52周。如何在R中做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-04 13:06:15

为什么不直接编写一个函数,根据你给出的定义给出气象周呢?包lubridate将给你一年中的一天与yday,这可以作为一个向量的正确的周标签的索引。用简单的模块化数学和级联来构造它们是很简单的。

然后,您只需要知道您是否处于闰年,使用lubridate::leap_year也是可能的。将它们组合到一个ifelse中,您就有了一个易于使用的函数:

代码语言:javascript
复制
met_week <- function(dates)
{
  normal_year <- c((0:363 %/% 7 + 1), 52)
  leap_year   <- c(normal_year[1:59], 9, normal_year[60:365])
  year_day    <- lubridate::yday(dates)

  return(ifelse(lubridate::leap_year(dates), leap_year[year_day], normal_year[year_day]))
}

你也能做到

代码语言:javascript
复制
df %>% mutate(week = met_week(date))
票数 3
EN

Stack Overflow用户

发布于 2020-05-04 12:39:13

您可以在一年中的某一天手动完成,但不确定是否已经为此构建了一个函数。

代码语言:javascript
复制
df %>% 
  mutate(Week = pmin(52, ceiling(yday(date) / 7)),
         Year = year(ymd(date)))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61592239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档