Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.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中的每周数据帧转换为每月数据帧_R - Fatal编程技术网

将R中的每周数据帧转换为每月数据帧

将R中的每周数据帧转换为每月数据帧,r,R,我的dat如下所示,不同的节点描述有4年的每周数据 ID1 ID2 DATE_ value 1: 00001 436 2014-06-29 175.8164 2: 00001 436 2014-07-06 188.9264 3: 00001 436 2014-07-13 167.5376 4: 00001 436 2014-07-20 160.7907 5: 00001 436

我的dat如下所示,不同的节点描述有4年的每周数据

         ID1     ID2   DATE_     value
1:     00001     436 2014-06-29 175.8164
2:     00001     436 2014-07-06 188.9264
3:     00001     436 2014-07-13 167.5376
4:     00001     436 2014-07-20 160.7907
5:     00001     436 2014-07-27 185.3018
6:     00001     436 2014-08-03 179.5748
要将数据帧转换为每月。请尝试下面的代码

df %>%
  tq_transmute(select     = c(value,ID1),
               mutate_fun = apply.monthly,
               FUN        = mean)
但我的输出如下所示

DATE_                 value
  <dttm>                <dbl>
1 2014-06-29 00:00:00    144.
2 2014-07-27 00:00:00    143.
3 2014-08-31 00:00:00    143.
4 2014-09-28 00:00:00    152.
5 2014-10-26 00:00:00    156.
6 2014-11-30 00:00:00    166.
DATE\uu值
1 2014-06-29 00:00:00    144.
2 2014-07-27 00:00:00    143.
3 2014-08-31 00:00:00    143.
4 2014-09-28 00:00:00    152.
5 2014-10-26 00:00:00    156.
6 2014-11-30 00:00:00    166.
但是我希望有ID1、ID2、日期(每月)和值(平均值或最大值为4周),而不是只有日期和值,因为我有4年的不同ID1的数据。有人能帮我做些什么吗

dta <- data.frame(id1=rep("00001",6),id2=rep("436",6),
              date_=as.Date(c("29jun2014","6jul2014","13jul2014","20jul2014","27jul2014","3aug2014"),"%d%B%Y"),
              value=c(175.8164,188.9264,167.5376,160.7907,185.3018,179.5748))

问题是数据集没有每日数据。
apply.monthly
函数来自xts,但tidyquant在许多函数周围使用包装器,因此它们以更整洁的方式工作<代码>应用。每月需要一个xts对象,它基本上是一个带有时间索引的矩阵

还要知道apply.monthly返回timeseries中当月的最后一天。看看您的示例集,2017年7月的最后一天将是27日。现在,如果您在一个月内有5条记录(周),则平均函数将在5条记录上执行此操作。它永远不会精确到1个月,因为每周数据永远不会覆盖每月数据

但是使用tidyquant,如果您将结果与原始数据结合起来,您可以使用数据获得ID1和ID2的月度结果。请参阅下面的代码。我没有删除任何不需要的列

df1 %>%
  tq_transmute(select     = c(value, ID1),
               mutate_fun = apply.monthly,
               FUN        = mean) %>% 
  mutate(DATE_ = as.Date(DATE_)) %>% 
  inner_join(df1, by = "DATE_")

# A tibble: 3 x 5
  DATE_      value.x ID1   ID2   value.y
  <date>       <dbl> <fct> <fct>   <dbl>
1 2014-06-29    176. 00001 436      176.
2 2014-07-27    176. 00001 436      185.
3 2014-08-03    180. 00001 436      180.
df1%>%
tq_转换(选择=c(值,ID1),
mutate_fun=apply.monthly,
乐趣=平均值)%>%
变异(日期=as.DATE(日期))%>%
内部联接(df1,by=“DATE”)
#一个tibble:3x5
日期\值.x ID1 ID2值.y
1 2014-06-29    176. 00001 436      176.
2 2014-07-27    176. 00001 436      185.
3 2014-08-03    180. 00001 436      180.
数据:


df1个月大于4周。您需要定义如何处理重叠和“underlaps”。您希望将什么作为分组也不明确。我希望输出中的值(月平均值)和日期(月的最后一天)、ID1、ID2列对数据集执行一些分析。您的数据集不支持您的请求。
df1 %>%
  tq_transmute(select     = c(value, ID1),
               mutate_fun = apply.monthly,
               FUN        = mean) %>% 
  mutate(DATE_ = as.Date(DATE_)) %>% 
  inner_join(df1, by = "DATE_")

# A tibble: 3 x 5
  DATE_      value.x ID1   ID2   value.y
  <date>       <dbl> <fct> <fct>   <dbl>
1 2014-06-29    176. 00001 436      176.
2 2014-07-27    176. 00001 436      185.
3 2014-08-03    180. 00001 436      180.
df1 <- data.frame(ID1 = rep("00001", 6),
           ID2 = rep("436", 6),
           DATE_ = as.Date(c("2014-06-29", "2014-07-06", "2014-07-13", "2014-07-20", "2014-07-27", "2014-08-03")),
           value = c(175.8164,188.9264,167.5376,160.7907,185.3018,179.5748)
           )