Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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 聚合函数不';I don’我不想在宿舍里过几个月_R_Aggregate - Fatal编程技术网

R 聚合函数不';I don’我不想在宿舍里过几个月

R 聚合函数不';I don’我不想在宿舍里过几个月,r,aggregate,R,Aggregate,我正在处理下面的问题。我想把月度数据转换成季度数据。我想要的是一个函数,第一个输出是数据,第二个输出是1,2或3。如果我选择某个数字,它应该选择适当的月份作为季度日期。所以我们有12个月,每个季度3个月。我把它分为四组: 1-1月(第一季度)、4月(第二季度)、7月(第三季度)、10月(第四季度) 2-2月(第一季度)、5月(第二季度)、8月(第三季度)、11月(第四季度) 3-3月(第一季度)、6月(第二季度)、9月(第三季度)、12月(第四季度) 如果我选择1,我想选择1月份作为第一季度,4

我正在处理下面的问题。我想把月度数据转换成季度数据。我想要的是一个函数,第一个输出是数据,第二个输出是1,2或3。如果我选择某个数字,它应该选择适当的月份作为季度日期。所以我们有12个月,每个季度3个月。我把它分为四组:

1-1月(第一季度)、4月(第二季度)、7月(第三季度)、10月(第四季度)

2-2月(第一季度)、5月(第二季度)、8月(第三季度)、11月(第四季度)

3-3月(第一季度)、6月(第二季度)、9月(第三季度)、12月(第四季度)

如果我选择1,我想选择1月份作为第一季度,4月份作为第二季度,依此类推

如果我选择2,我希望第一季度为2月,第二季度为5月,依此类推

如果我选择3,我希望第一季度是三月,第二季度是六月,依此类推

我有以下代码:

date3<-(seq(as.Date('2000-11-01'),as.Date('2020-06-01'),by = '1 month'))
x<-rnorm(length(date3))
y<-runif(length(date3))
z<-rexp(length(date3))
df3<-data.frame(date3,x,y,z)
    agg_quarter<-function(data,method){
        aggregate(data[-1], list(yq = as.yearqtr(data$date)), function(x) x[method])}
    agg_quarter(df3,1)
    agg_quarter(df3,2)
    agg_quarter(df3,3)

date3您可以使用季度的月数创建一个新列,然后在
method
和月数匹配的地方提取数据

library(dplyr)

agg_quarter<-function(data,method){
  data %>%
    mutate(month = lubridate::month(date3) %% 3, 
           month = replace(month, month == 0, 3)) %>%
    group_by(yq = zoo::as.yearqtr(date3)) %>%
    summarise(across(x:z, ~.x[month == method][1]))
}
agg_quarter(df3,1)

#     yq        x      y        z
#  <yearqtr>  <dbl>  <dbl>    <dbl>
# 1 2000 Q4      NA     NA     NA      
# 2 2001 Q1   -0.340  0.534  0.567  
# 3 2001 Q2    1.38   0.865  0.517  
# 4 2001 Q3   -0.145  0.238  0.297  
# 5 2001 Q4   -1.02   0.208  0.539  
# 6 2002 Q1    0.603  0.926  0.0333 
# 7 2002 Q2    0.178  0.638  1.92   
# 8 2002 Q3    0.106  0.395  0.00905
# 9 2002 Q4    0.862  0.986  0.388  
#10 2003 Q1   -0.601  0.805  1.78   
# … with 69 more rows
库(dplyr)
总季度%
突变(月=润滑::月(日期3)%%3,
月=替换(月,月==0,3))%>%
组员(yq=动物园::截至年月日(日期3))%>%
总结(跨越(x:z,~.x[月==方法][1]))
}
总季度(df3,1)
#yq x y z
#          
#2000年第4季度不适用
#2二零零一年第一季-0.3400.5340.567
#2001年第3季度1.38 0.865 0.517
#4二零零一年第三季-0.145 0.238 0.297
#5二零零一年第四季-1.02 0.208 0.539
#6 2002年第一季度0.603 0.926 0.0333
#7 2002年第2季度0.178 0.638 1.92
#8 2002年第3季度0.106 0.395 0.00905
#9二零零二年第四季0.862 0.986 0.388
#10二零零三年第一季-0.6010.8051.78
#…还有69行

如果问题是如何找到给定日期所在季度的第i个月(i=1、2或3)的年/月,那么
as.yearmon(as.yearqtr(date))+(i-1)/12
你确定吗?我敢肯定,我一个月都在看。我不知道你做了什么,但这给出了2020年8月:
i,这给出了季度的第i个月(i=1、2或3),而不是季度本身:
aggregate(df3[-1],list(ym=as.yearmon(as.yearqtr(df3[[1]])+(i-1)/12),mean)