按唯一日期移动平均线,每个日期有多个观察值

时间:2016-10-07 16:05:26

标签: r dplyr moving-average

我有一个数据集,每个日期可能包含多个观察结果。因此,在date1上可以有5个观察,在date2上可以有2个观察,在group3上可以有1个观察。

我想计算移动平均线 - 按日期 - 并且重要的是,虽然没有总结/减少'行数。那就是在上面这个例子中,我仍然会有8行数据,并且在它旁边的一列中我会得到那个日期的滚动平均价格,我觉得这很有挑战性,因为当我使用ZOO包中的典型滚动功能时,它会排成一行-line,我不知道如何让它在DATE跳过

例如,第一步通常是:

NA

---但总结让我失去了行。

df %>% groupy_by(DATE) %>% summarise(mean_daily_price = mean(price)) %>% ungroup() %>% arrange(Date) %>% mutate( ra = rollapply(price, 2, mean, partial=T)   

2 个答案:

答案 0 :(得分:1)

在下面的代码中,我们使用var countrystring = '?country=" + countrySelected; // code to make var querystring = the rest of // the requirements for the country to do something // and your code to verify what the user has entered addstring = countrystring + querystring; window.location = window.location.href +addstring; 代替mutate来添加summarise,以便我们保留数据框的所有行。然后,在最后的mean_daily_price中,我们仅针对mutate的唯一值运行rollapply,然后使用mean_daily_pricetable重复rep的输出1}}按每个rollapply的行数。

Date
DF %>% 
  arrange(Date) %>% 
  group_by(Date) %>% 
  mutate(mean_daily_price = mean(Price)) %>% 
  ungroup() %>% 
  mutate(ra = rep(rollapply(unique(mean_daily_price), 2, mean, fill=NA, align="right"), 
                  table(Date)[order(unique(Date))]))

答案 1 :(得分:0)

我认为您最安全的方法需要分两个步骤 - 按.leftSidebar计算滚动平均值,然后将它们合并(在此处仍然使用Date

dplyr

给出:

rolledAvg <-
  DF %>%
  group_by(Date) %>%
  summarise(mean_daily_price = mean(Price)) %>%
  ungroup() %>%
  arrange(Date) %>%
  mutate( ra = rollapply(mean_daily_price
                         , 2
                         , mean
                         , partial=T
                         , fill = NA))

left_join(DF, rolledAvg)

我在评论中看到另一个答案,您认为第一个 Date Price Average.by.Date Moving_Average_Size_2 mean_daily_price ra 1 Jan-13 100 400 NA 400 250 2 Jan-13 200 400 NA 400 250 3 Jan-13 300 400 NA 400 250 4 Jan-13 1000 400 NA 400 250 5 Jan-13 400 400 NA 400 250 6 Jul-14 150 100 250 100 350 7 Jul-14 50 100 250 100 350 8 Oct-16 600 600 350 600 600 应该是250 - 如果是这种情况,请将您的调用计算更改为ra。现在,它似乎表现得像预期/记录。所以,如果你想要不同的东西,你需要解释你想要的改变(可能是一个单独的问题)。

另一个警告,对于偶然发现的其他读者来说尤其重要:这种当前方法将连续日期条目视为等距,无论它们实际距离多远。如果这适合您的需要,那很好。但是,在许多使用案例中,您可能需要注意测量之间的实际时间量。

类似地,当前的方法丢失了所有测量数据的信息,可能值得考虑一种按观察次数加权的方法(除非你很乐意相信每天的计算平均值)。

相关问题