将R中的每周数据帧转换为每月数据帧
我的dat如下所示,不同的节点描述有4年的每周数据将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
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)
)