Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何根据特定的日期范围查找每个星期二以及它';使用某些已定义的逻辑的s值_R_Dplyr_Tidyverse_Tidyr_Lubridate - Fatal编程技术网

R 如何根据特定的日期范围查找每个星期二以及它';使用某些已定义的逻辑的s值

R 如何根据特定的日期范围查找每个星期二以及它';使用某些已定义的逻辑的s值,r,dplyr,tidyverse,tidyr,lubridate,R,Dplyr,Tidyverse,Tidyr,Lubridate,对于任何特定的日期范围,我需要 每月第1周星期二的平均值 每月第2周星期二的平均值 每月第三周星期二的平均值 对于第4周的星期二和第5周的星期二,逻辑需要如下 如果一个月只有4个星期二,则取最后一周,但是如果一个月有5个星期 然后需要遵循如下逻辑 如果该月有第五个星期二,即3月和6月的最后一周, 其他月份的最后一周为4周,即2月、4月和5月 然后取平均值(第5周三月+第4周二月+第4周四月) 每个月取第4周的平均值,分别为5周 复制代码 dates_seq<-(seq(as.Date("

对于任何特定的日期范围,我需要

每月第1周星期二的平均值 每月第2周星期二的平均值 每月第三周星期二的平均值

对于第4周的星期二和第5周的星期二,逻辑需要如下 如果一个月只有4个星期二,则取最后一周,但是如果一个月有5个星期 然后需要遵循如下逻辑

如果该月有第五个星期二,即3月和6月的最后一周, 其他月份的最后一周为4周,即2月、4月和5月 然后取平均值(第5周三月+第4周二月+第4周四月) 每个月取第4周的平均值,分别为5周

复制代码


dates_seq<-(seq(as.Date("2020/02/01"), by = "day", length.out = 152))
dates_seq<-as.data.frame(dates_seq)
values<-seq(1:152)
df<-as.data.frame(cbind(dates_seq,values))


我想这会让你得到结果。请注意,第n个值“NA”是您的“最后一个星期二”。看看它是否测试良好

    df %>%
  filter(wday(dates_seq) == 2) %>%
  mutate(Month = month(dates_seq)) %>%
  arrange(dates_seq) %>%
  group_by(Month) %>%
  mutate (nth = ifelse(Month < lead(Month, default = last(Month)), 99, 1:5)) %>%
  mutate (nth = ifelse((nth > lead(nth)), 99, nth)) %>%
  group_by(nth) %>%
  summarise(mean = mean(values))
df%>%
过滤器(wday(日期顺序)=2)%>%
突变(月=月(日期顺序))%>%
安排(日期)%>%
分组单位(月)%>%
变异(n=ifelse(月<领先(月,默认值=最后(月)),99,1:5))%>%
突变(第n次=如果其他((第n次>领先(第n次)),99,第n次))%>%
第n组%>%
总结(平均值=平均值)

到目前为止您尝试了什么?@Shan R如果您能在这方面帮助我,我将不胜感激。您能解释一下这一行的潜在客户(月份,默认值=上一个(月)),99,1:5)以及我们为什么使用99吗?这是一个虚拟值。我本来有一个比较的数字。你可以把99都改成NA,代码就行了。有用吗?如果是这样,请考虑通过单击答案旁边的灰色复选标记“接受”该解决方案。
    df %>%
  filter(wday(dates_seq) == 2) %>%
  mutate(Month = month(dates_seq)) %>%
  arrange(dates_seq) %>%
  group_by(Month) %>%
  mutate (nth = ifelse(Month < lead(Month, default = last(Month)), 99, 1:5)) %>%
  mutate (nth = ifelse((nth > lead(nth)), 99, nth)) %>%
  group_by(nth) %>%
  summarise(mean = mean(values))